jedis基礎功能使用細則

上一篇介紹了jedis的高級特性,這一片咱們就介紹一下基本的功能,好像有點本末倒置是吧,不過沒關系,我就是這么的任性!本文只是一些基本的API的羅列,一是對jedis功能的記錄,每次需要市翻一下,另外也算是翻譯,給那些懶得看英文注釋的朋友一點幫助。老樣子,上maven

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.9.0</version>
</dependency>

一. 基礎功能

 @Test                                                                                   
 public void testBase() throws InterruptedException {                                    
     //set值                                                                              
     jedis.set("1_set1", "1");                                                           
     jedis.set("1_set2", "2");                                                           
     //get 值                                                                             
     assert "1".equals(jedis.get("1_set1"));                                             
     //當key的個數為1時  exists的返回值是boolean                                                    
     assert jedis.exists("1_set1");                                                      
     //當keys的個數大于1,那么返回值的結果為包含key的個數                                                     
     assert 2 == jedis.exists("1_set1", "1_set2", "none");                               
     //刪除key,返回值為刪除的個數,如果key不存在,什么也不操作                                                   
     assert 1 == jedis.del("1_set1");                                                    
                                                                                         
     /**                                                                                 
      * 表明這個key對應的類型。"none","string","list","set",none的話是沒有這個key的返回值                     
      */                                                                                 
     assert "string".equals(jedis.type("1_set2"));                                       
     /**                                                                                 
      * 給key重新命名,如果oldKey與newKey名稱一樣,報錯!如果新的key已經存在,那么覆蓋                                 
      */                                                                                 
     assert "OK".equals(jedis.rename("1_set2", "1_set3"));                               
                                                                                         
     /**                                                                                 
      * 設置這個key的存在時間為1s,1秒過后,key被刪除                                                      
      */                                                                                 
     jedis.expire("1_set3", 1);                                                          
                                                                                         
     Thread.sleep(2000);                                                                 
     /**                                                                                 
      * 過了超時的時間,key被清除,所以key不存在了                                                         
      */                                                                                 
     assert null == jedis.get("1_set3");                                                 
     /**                                                                                 
      * set 與 expire 命令的結合版                                                              
      */                                                                                 
     jedis.setex("ttl", 5, "ddd");                                                       
     /**                                                                                 
      * 一個會過期的key距離被刪除還有多少時間,單位是秒                                                        
      * 返回值為-1標識這個key沒有失效時間,-2標識沒有這個key                                                  
      */                                                                                 
     assert jedis.ttl("ttl") <= 5;                                                       
                                                                                         
     /**                                                                                 
      * 返回原來的值,設置舊值,原子操作                                                                 
      */                                                                                 
     assert "ddd".equals(jedis.getSet("ttl", "aaa"));                                    
                                                                                         
                                                                                         
     jedis.set("sub", "asdfghjkl");                                                      
     /**                                                                                 
      * 截取某個key的value,左右兩邊都是閉合的,負數的話是從最后開始,                                              
      * -1為倒數第一個字符,-2為倒數第二個字符,以此類推                                                       
      */                                                                                 
     assert "asd".equals(jedis.substr("sub", 0, 2));                                     
     assert "asdfghjk".equals(jedis.substr("sub", 0, -2));                               
                                                                                         
     /**                                                                                 
      * 批量set值   以key,value,key,value的格式,如果key存在value覆蓋,key不存在,value添加                   
      */                                                                                 
     jedis.mset("a", "1", "b", "2", "c", "3");                                           
     List<String> mget = jedis.mget("a", "b", "c");                                      
     assert Arrays.asList("1", "2", "3").equals(mget);                                   
                                                                                         
     /**                                                                                 
      * append 添加,是set的一種特殊情況,如果key值不存在,                                                 
      * 同set,直接設置值,如果key存在,那么value為原來的vlaue+append方法中的value                              
      */                                                                                 
     jedis.append("a", "444");                                                           
     assert "1444".equals(jedis.get("a"));                                               
                                                                                         
                                                                                         
 }                                                                                       

二. hash

 /**                                                                                                    
  * h開頭 代表 hash 表                                                                                       
  * key:對應的是hash表的名稱                                                                                    
  * field : 對應的key                                                                                      
  * value:對應的是value                                                                                     
  * <p>                                                                                                 
  * <p>                                                                                                 
  * <p>                                                                                                 
  * m 批量      mass                                                                                      
  */                                                                                                    
 @Test                                                                                                  
 public void testHash() {                                                                               
     /**                                                                                                
      * 往hash表里set值                                                                                     
      */                                                                                                
     jedis.hset("hset", "name", "tt");                                                                  
     /**                                                                                                
      * 從hash表中取值                                                                                       
      */                                                                                                
     assert "tt".equals(jedis.hget("hset", "name"));                                                    
                                                                                                        
     /**                                                                                                
      * 如果hset中name已經存在,那么不進行任何操作,返回0,表示field已經存在                                                       
      * 如果不存在,操作同hset一致,返回1                                                                             
      *                                                                                                 
      *                                                                                                 
      * 該實例中已經存在所以不賦值                                                                                   
      */                                                                                                
     jedis.hsetnx("hset", "name", "dd");                                                                
     assert "tt".equals(jedis.hget("hset", "name"));                                                    
                                                                                                        
     Map<String, String> map = new HashMap<>();                                                         
     map.put("age", "23");                                                                              
     map.put("address", "山東");                                                                          
                                                                                                        
     /**                                                                                                
      * 批量set hash表中的值   ,如果field存在,那么替換老值                                                              
      */                                                                                                
     jedis.hmset("hset", map);                                                                          
                                                                                                        
     /**                                                                                                
      * 批量get,如果field不存在返回null,不會報錯                                                                     
      */                                                                                                
     List<String> hmget = jedis.hmget("hset", "age", "name", "address", "44");                          
     assert Arrays.asList("23", "tt", "山東", null).equals(hmget);                                        
                                                                                                        
     /**                                                                                                
      * 判斷存在                                                                                            
      */                                                                                                
     assert jedis.hexists("hset", "name");                                                              
     /**                                                                                                
      * 刪除成功返回1,0 標識沒有進行任何操作                                                                            
      */                                                                                                
     assert 1 == jedis.hdel("hset", "age");                                                             
     /**                                                                                                
      * hash 表中有多少個元素                                                                                   
      */                                                                                                
     assert 2 == jedis.hlen("hset");      //name,address                                                
     /**                                                                                                
      *          "hset"這個hash表中有多個值                                                                     
      */                                                                                                
     List<String> hsetValues = jedis.hvals("hset");                                                     
     assert Arrays.asList("tt", "山東").equals(hsetValues);                                               
     /**                                                                                                
      * "hset"這個hash表中有多少個key                                                                           
      */                                                                                                
     Set<String> hsetKeys = jedis.hkeys("hset");                                                        
     for(String key:hsetKeys){                                                                          
         System.out.print(key+" ");                                                                     
     }                                                                                                  
     /**                                                                                                
      * 獲取hash表中的所有的內容                                                                                  
      */                                                                                                
     Map<String, String> hsetAll = jedis.hgetAll("hset");                                               
     for (Map.Entry<String, String> entry : hsetAll.entrySet()) {                                       
         System.out.println("field="+entry.getKey()+",value="+entry.getValue());                        
     }                                                                                                                                                                                                    
 }                                                                                                      

三. list

 @Test                                                                                     
 public void testList() {                                                                  
     jedis.del("l");                                                                       
     /**                                                                                   
      * 從列表右邊添加元素                                                                          
      */                                                                                   
     jedis.rpush("l", "123", "456", "789");                                                
     /**                                                                                   
      * 從列表左邊添加元素  ,注意元素順序    888,999,666                                                  
      */                                                                                   
     jedis.lpush("l", "666", "999", "888");                                                
     /**                                                                                   
      * list 中的長度                                                                          
      */                                                                                   
     Long length = jedis.llen("l");                                                        
     assert 6 == length;                                                                   
     /**                                                                                   
      * key的類型為list                                                                        
      */                                                                                   
     assert "list".equals(jedis.type("l"));                                                
     /**                                                                                   
      * 輸出制定范圍的數據                                                                          
      */                                                                                   
     List<String> range = jedis.lrange("l", 0, length);                                    
     for (String sr : range) {                                                             
         System.out.print(sr + " ");                                                       
     }                                                                                     
                                                                                           
     System.out.println();                                                                 
                                                                                           
     //裁剪函數,同lrange的區別在于ltrim改變了原來的內容  ,左右閉合                                               
     jedis.ltrim("l", 0, 3);                                                               
     length = jedis.llen("l");                                                             
     range = jedis.lrange("l", 0, length);                                                 
     for (String sr : range) {                                                             
         System.out.print(sr + " ");                                                       
     }                                                                                     
                                                                                           
     System.out.println();                                                                 
                                                                                           
                                                                                           
     /**                                                                                   
      * 輸出制定索引位置的數據                                                                        
      */                                                                                   
     assert "888".equals(jedis.lindex("l", 0));                                            
                                                                                           
                                                                                           
     /**                                                                                   
      * 把list中的頭的數據彈出來  ,并且刪除                                                              
      */                                                                                   
     String lpopValue = jedis.lpop("l");                                                   
                                                                                           
     assert "888".equals(lpopValue);                                                       
     /**                                                                                   
      * 把list中的尾的數據彈出來,并且刪除                                                                
      */                                                                                   
     String rpopValue = jedis.rpop("l");                                                   
     assert "123".equals(rpopValue);                                                       
                                                                                           
                                                                                           
     /**                                                                                   
      * 1. 返回值標識刪除的個數 ,如果不存在要刪除的元素,返回0                                                     
      * 2.    count 字段比較有意思,他的絕對值表示刪除的個數。0 表示全刪 ,正數表示從左往右,負數表示從右往左                         
      */                                                                                   
     assert 1==jedis.lrem("l", 1, "666");                                                  
                                                                                           
 }                                                                                         

四. set

/**                                                                     
 * set中的值不允許重復                                                          
 */                                                                     
@Test                                                                   
public void testSet() {                                                 
    /**                                                                 
     * 添加元素                                                             
     */                                                                 
    jedis.sadd("set", "123", "456", "789", "490", "777");               
    /**                                                                 
     * 重復插入                                                             
     */                                                                 
    jedis.sadd("set", "123", "456", "789", "490", "777");               
    /**                                                                 
     * 獲取指定key的元素的數量                                                    
     */                                                                 
    Set<String> set = jedis.smembers("set");                            
    for (String str : set) {                                            
        System.out.print(str + " ");                                    
    }                                                                   
    /**                                                                 
     * 刪除元素                                                             
     */                                                                 
    jedis.srem("set", "456", "789");                                    
    /**                                                                 
     * 判斷set中元素的個數                                                      
     */                                                                 
    assert 3 == jedis.scard("set");                                     
                                                                        
                                                                        
    jedis.sadd("set1", "123", "456", "789");                            
    jedis.sadd("set2", "123", "456", "777");                            
                                                                        
                                                                        
    /**                                                                 
     * 取兩個set的交集,sinterstore將交集放到一個新的set中                               
     */                                                                 
    Set<String> sinter = jedis.sinter("set1", "set2");                  
    for (String s : sinter) {                                           
        System.out.println(s);                                          
    }                                                                   
    /**                                                                 
     * 兩個set的并集,sunionstore將并集放到一個新的set中                                
     */                                                                 
    Set<String> sunion = jedis.sunion("set1", "set2");                  
    for (String s : sunion) {                                           
        System.out.println(s);                                          
    }                                                                   
                                                                        
    /**                                                                 
     * 差集,以第一個集合作為基準                                                    
     */                                                                 
    jedis.sadd("deff1", "1", "2", "3", "4");                            
    jedis.sadd("deff2", "1");                                           
    jedis.sadd("deff3", "3", "4");                                      
    Set<String> sdiff = jedis.sdiff("deff1", "deff2", "deff3");         
    for (String s : sdiff) {                                            
        System.out.println(s);                                          
    }                                                                   
                                                                        
}                                                                       

另外還有一個SortedSet的一個結構,是在set的基礎上增加了一個score的一個維度,與set不近相同。大家enjoy吧~

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,837評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,196評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 175,688評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,654評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,456評論 6 406
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,955評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,044評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,195評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,725評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,608評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,802評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,318評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,048評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,422評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,673評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,424評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,762評論 2 372

推薦閱讀更多精彩內容