Jedis就是集成了redis的一些命令操做,封裝了redis的java客戶端。java
使用Jedis操做redis數據庫,就至關於使用了JDBC操做Mysql,SqlServer數據庫。redis
使用Jedis鏈接Redis有兩種方式:Jedis對象直連Redis,JedisPool鏈接池管理鏈接。sql
Jedis對象直連:數據庫
使用Jedis對象直連的方式,首先要下載Jedis對應的jar包,
如圖如今最新的版本是jedis-2.9.0併發
將下載好的jar包添加進項目裏的classpath中,就可使用Jedis來鏈接Redis數據庫了。工具
Jedis對象直連方式能夠分爲五個步驟:
一、導入redis.clients.jedis.Jedis類
二、新建Jedis對象,其構造方法 new Jedis(String host,int port) ,host參數爲Redis數據庫ip地址,port爲端口號。
三、調用jedis.connect()方法鏈接Redis
四、調用jedis內置方法操做數據並得到結果(Jedis API會在後面詳細講)
五、調用jedis.disconnect()方法關閉鏈接spa
例一:用Jedis直連方式鏈接Redis數據庫,獲取本機redis中全部key,並打印輸出3d
1 public class JedisToRedis { 2 3 public static void main(String[] args) { 4 //新建jedis對象 5 Jedis jedis = new Jedis("127.0.0.1",6379); 6 //3.鏈接Redis 7 jedis.connect(); 8 //4.使用Jedis內置方法操做Redis數據並獲取結果 9 //這裏咱們使用Jedis的key方法得到Redis中的全部key 10 Set<String> keys = jedis.keys("*"); 11 //將得到的key所有打印出來 12 for (String key:keys 13 ) { 14 System.out.println(key); 15 } 16 //關閉jedis 17 jedis.close(); 18 } 19 20 }
效果: code
爲了展現例1的效果,咱們在控制檯用redis命令獲取本機Redis中全部的key對象
能夠看到,本機redis裏存有的key有「key」、「ok」,接下來運行JedisDemo.main(),查看控制檯輸出以下:
生產環境通常使用鏈接池的方式對Redis鏈接進行管理,全部Jedis對象先放在池子
中每一次須要鏈接Redis的時候,只須要在池子中借,用完了再歸還給池子。
Jedis提供了JedisPool這個類做爲對Jedis的鏈接池,同時使用了Apache的通用對象池工具commons-pool做爲資源的管理工具,要使用JedisPool鏈接池,
要先下載commons-pool jar包,如圖最新版本是commons-pool-2.6.0
附:jedis2.9.0.jar自帶了鏈接池資源的管理工具JedisPoolConfig類
,後面例子將使用jedis自帶的JedisPoolConfig類來配置鏈接池)
Jedis鏈接池管理方式鏈接Redis能夠分爲如下幾個步驟:
一、導入包
二、得到鏈接池配置對象JedisPoolConfig
三、設置鏈接池信息(最大鏈接數、最大空閒鏈接數等)
四、得到鏈接池
五、得到核心對象Jedis
六、用Jedis操做Redis數據並取得結果
七、關閉Jedis鏈接,關閉JedisPool鏈接池,釋放資源
例二,Jedis鏈接池管理鏈接Redis數據庫,獲取本機redis中全部key,並打印輸出
//1.得到鏈接池配置對象 JedisPoolConfig config = new JedisPoolConfig(); //2.設置鏈接池信息(最大鏈接數) //設置鏈接池信息(最大空閒鏈接數) config.setMaxTotal(30); config.setMaxIdle(10); //3.得到鏈接池 JedisPool jedisPool = new JedisPool(config,"127.0.0.1",6379); //4.獲得核心對象 Redis redis = jedisPool.getResource(); /5.使用Jedis內置方法操做Redis數據並獲取結果 //這裏咱們使用Jedis的key方法得到Redis中的全部key Set<String> keys = jedis.keys("*"); //將得到的key所有打印出來 for (String key:keys ) { System.out.println(key); } //關閉jedis jedis.close();
Jedis兩種鏈接方式的優劣性對比
客戶端鏈接Redis使用的是TCP協議,直連的方式每次須要創建TCP鏈接,而鏈接池的方式是能夠預先初始化好Jedis鏈接,
因此每次只須要從Jedis鏈接池借用便可,而借用和歸還操做是在本地進行的,只有少許的併發同步開銷,遠遠小於新建TCP鏈接的開銷。
另外直連的方式沒法限制Jedis對象的個數,在極端狀況下可能會形成鏈接泄露,而鏈接池的形式能夠有效的保護和控制資源的使用。
可是直連的方式也並非一無可取,下面給出兩種方式各自的優劣勢。
Jedis內置基本方法:
//驗證redis密碼,若是沒有設置密碼這段能夠省略 jedis.auth(String password); //鏈接 jedis.connect(); //關閉鏈接 jedis.disconnect(); //列出符合特定條件的key 其中pattern爲匹配條件,填*則爲列出全部 Set<String> keys = jedis.keys(String pattern); //移出給定的一個或多個key,若是key不存在,則忽略該命令 jedis.del(String keyname1,String keyname2…….);
//檢查給定key是否存在 ,返回一個boolean
jedis.exists(String keyname);
//將key1更名爲key2,當key1和key2相同或者key1不存在時,返回一個錯誤
jedis.rename(String key1 , String key2);
//返回給定key所儲存的值的類型。 none(key不存在),string(字符串),list(列表),set(集合),zset(有序集),hash(哈希表)
jedis.type(String keyname);
//移出給定key的生存時間(設置這個key永不過時)
jedis.persist(String keyname);
//設置key生存時間,當key過時時,它會被自動刪除。 Time爲秒數
jedis.expire(String keyname , int time);
Jedis操做String數據相關方法:
//字符串值value關聯到key,若是key不存在則會新增一個key jedis.set(String keyname, String value); //將值value關聯到key,並將key的生存時間設爲seconds(秒)。 jedis.setex(String keyname,String value ,int secondes); //清空整個redis實例全部的key jedis.flushAll(); //清空redis當前數據庫全部的key jedis.flushDB(); //返回key的個數 jedis.dbSize();
Jedis操做Hash表相關方法:
//設置一張hash表的兩種方式: //一、分別給哈希表key中的域設置值,分別對key中的字段一、字段2設置值 jedis.hset(String keyname , String fieldname1 , String value1); jedis.hset(String keyname , String fieldname2 , String value2); //二、用一個JAVA中的HashMap直接存儲爲redis中的哈希表 Map map = new HashMap(); map.put(String fieldname1 , String value1); map.put(String filedname2 , String value2); jedis.hmset(String keyname , Map map); //返回哈希表key中給定字段field的值,返回對應值的類型 jedis.hget(String keyname , String fieldname); //返回哈希表key中給定多個字段的值,返回一個List jedis.hget(String keyname , String fieldname1,String fieldname2….); //返回哈希表key中的全部字段和值,返回一個Map<String,String> jedis.hgetAll(String keyname); //刪除哈希表key中的一個或多個指定字段 jedis.hdel(String keyname , String fieldname1 , String fieldname2…..); //查看哈希表key中,給定字段field是否存在。 jedis.hexists(String keyname , String fieldname); //返回哈希表key中的全部字段 jedis.hkeys(String keyname); //返回哈希表key中的全部值 jedis.hvals(String keyname);
Jedis操做List列表數據相關方法:
//將值value插入到列表key的表頭。 jedis.lpush(String keyname , String value); //返回列表key中指定區間內的元素,區間以偏移量start和stop指定. 下標(index)參數start和stop從0開始; 負數下標表明從後開始(-1表示列表的最後一個元素,-2表示列表的倒數第二個元素,以此類推) 返回一個List jedis.lrange(String keyname , int start , int stop); //返回列表key的長度 , 返回一個Int jedis.llen(String keyname);
Jedis操做Set集合數據相關方法:
//將member元素加入到集合key當中。 jedis.sadd(String keyname , String value); //移除集合中的member元素。 jedis.srem(String keyname , String value); //返回集合key中的全部成員。返回一個set jedis.smembers(String keyname); //判斷元素是不是集合key的成員 jedis.sismember(String keyname , String value); //返回集合key的元素的數量 jedis.scard(String keyname); //返回一個集合的所有成員,該集合是全部給定集合的交集 jedis.sinter(String key1 , String key2); //返回一個集合的所有成員,該集合是全部給定集合的並集 jedis.union(String key1 , String key2); //返回一個集合的所有成員,該集合是全部給定集合的差集 jedis.sdiff(String key1 , String key2);