使用Jedis操做Redis緩存(第二章)

           目錄

  •   Jedis簡介
  •   使用Jedis鏈接Redis
  •   使用JedisPool鏈接池鏈接Redis
  •   Jedis操做String
  •   Jedis操做List
  •   Jedis操做set
  •   Jedis操做Hash

 

  一.Jedis簡介

    Jedis就是集成了redis的一些命令操做,封裝了redis的java客戶端。java

    使用Jedis操做redis數據庫,就至關於使用了JDBC操做Mysql,SqlServer數據庫。redis

    

 

 

 


 二,Jedis鏈接Redis

    使用Jedis鏈接Redis有兩種方式:Jedis對象直連Redis,JedisPool鏈接池管理鏈接。sql

    Jedis對象直連:數據庫

    


 

 三,Jedis對象直連Redis   

    使用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(),查看控制檯輸出以下:

      

 

 

 


 

  四,Jedis鏈接池管理鏈接Redis

      生產環境通常使用鏈接池的方式對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);
相關文章
相關標籤/搜索