Jedis API操作Redis資料庫入門

半路出家菜碼農,裸辭找工迷茫中;面試碰壁知不足,歸家勤學記此中。

前段時間看完了csdn上的redis入門相關視訊,現在來學在java專案中操作redis的API,Jedis。文中程式碼是模仿網上各大俠的,並無什麼亮點。志在記錄自己學習的點滴,踏出的每步。

一、操作Redis的庫及其他基本資料:
1.官網上的各種語言操作Redis的庫的介紹:https://redis.io/clients(注意官方推薦的java庫是Jedis)。
2.網上找到的Jedis API文件:http://tool.oschina.net/uploads/apidocs/ (2.1.0版英文,中文我暫時沒找到)。
3.Jedis包:http://files.cnblogs.com/liuling/jedis-2.1.0.jar.zip
4.Redis連線池的包:http://files.cnblogs.com/liuling/commons-pool-1.5.4.jar.zip

二、啟動redis(案例中redis在本機)

二、匯入Jedis包以及Redis連線池:

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

三、Jedis物件生成

Jedis物件有各種對Redis的基本操作,包括對Redis支援的String、List等物件的基本增刪查改(與Redis操作命令基本一樣)。程式碼中以JUnit測試:

public void testClient() {
jedisCli = new Jedis("127.0.0.1", 6379); //新建Jedis物件
jedisCli.select(2); //切換Redis資料庫
jedisCli.set("firstJedis", "hello,Jedis"); //與Redis命令列操作基本一致
}

再舉Jedis對Map的操作的例子:

@Test
public void testMap() {
jedisCli = new Jedis("127.0.0.1", 6379); 
jedisCli.select(2);
jedisCli.hset("family", "lbq", "65"); //同Redis命令列中的hset操作,如名為family的set不存在,則建立set並放入名為lbq的元素,值為65
jedisCli.hset("family", "zjz", "62"); //Redis不支援int型別,如不傳String則會報錯。
System.out.println(jedisCli.hmget("family","lbq","zjz"));
Map testMap1 = new HashMap();
testMap1.put("num1", "1"); //此處同上面,不能傳非String型
testMap1.put("num2", "15");
testMap1.put("num3", "606");
testMap1.put("num4", "1024");
jedisCli.hmset("testMap1", testMap1); //傳入整個map物件入redis
System.out.println(jedisCli.hmget("testMap1", "num1","num2","num3","num4"));
}

四、使用Redis連線池:

與關係型的資料庫一樣,大型專案中使用連線池,能夠有效管理利用redis連線,避免連線資源不及時回收重用造成的浪費和對資料庫的影響。

程式碼如下:

1.在測試類中新建執行緒池私有靜態變數與各種配置屬性:

	private Jedis jedisCli;
private static JedisPool pool; //執行緒池物件
private static String ADDR = "127.0.0.1"; 	//redis所在伺服器地址(案例中是在本機)
private static int PORT = 6379; 		//埠號
private static String AUTH = "";		//密碼(我沒有設定)
private static int MAX_IDLE = 10;		//連線池最大空閒連線數(最多保持空閒連線有多少)
private static int MAX_ACTIVE = 50;		//最大啟用連線數(能用的最多的連線有多少)
private static int MAX_WAIT = 100000;		//等待可用連線的最大時間(毫秒),預設值-1,表示永不超時。若超過等待時間,則拋JedisConnectionException
private static int TIMEOUT = 10000;		//連結連線池的超時時間#使用連線時,檢測連線是否成功
private static boolean TEST_ON_BORROW = true;	//使用連線時,測試連線是否可用
	private static boolean TEST_ON_RETURN = true;			//返回連線時,測試連線是否可用

靜態塊載入連線屬性:

static{
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxIdle(MAX_IDLE);
config.setMaxActive(MAX_ACTIVE);
config.setMaxWait(MAX_WAIT);
config.setTestOnBorrow(TEST_ON_BORROW);
config.setTestOnReturn(TEST_ON_RETURN);
pool = new JedisPool(config, ADDR, PORT, TIMEOUT); //新建連線池,如有密碼最後加引數
}

獲取連線資源以及回收使用完的連線的方法:

	//獲取連線方法
	public static Jedis getJedisResource () {
try {
if (pool!=null) {
Jedis resource = pool.getResource();
return resource;
} 
return null;
} catch(Exception e) {
e.printStackTrace();
return null;
}
}
	//回收連線方法	
public static void returnResource (Jedis used) {
if(pool!=null){
pool.returnResource(used);
}
}
}

JUnit測試方法

@Test
public void testPool() {
Jedis resource = getJedisResource();
resource.select(2);
resource.lpush("Countries", "USA");	//redis對list頭的插入元素操作
resource.lpush("Countries", "UK");
resource.lpush("Countries", "CHINA");
System.out.println(resource.rpop("Countries"));	//list末尾彈出元素
returnResource(resource);
}