redis java 分頁、排序示例

Jedis 是 Redis 官方首選的 Java 客戶端開發包。

工作過程總結的一個示例,貼出來,如下:

Java代碼

  1. package com.wujintao.redis;  

  2.   

  3. import  java.util.Date;  

  4. import  java.util.HashMap;  

  5. import  java.util.Iterator;  

  6. import  java.util.List;  

  7. import  java.util.Map;  

  8. import  java.util.Set;  

  9.   

  10. import  org.junit.Test;  

  11.   

  12. import  redis.clients.jedis.Jedis;  

  13. import  redis.clients.jedis.Pipeline;  

  14. import  redis.clients.jedis.SortingParams;  

  15.   

  16. import  com.wujintao.redis.util.RedisUtil;  

  17.   

  18.   

  19. public   class  TestCase {  

  20.   

  21.      /**  

  22.      * 這種方式可以解決那些問題並且會實現高效的性能  

  23.      */   

  24.   

  25.      public   static   void  main(String[] args) {  

  26.   

  27.          // ...when closing your application:   

  28.         RedisUtil.getPool().destroy();  

  29.   

  30.     }  

  31.   

  32.      public   static   void  Hello() {  

  33.         Jedis jedis = RedisUtil.getJedis();  

  34.          try  {  

  35.              // 向key-->name中放入了value-->minxr   

  36.             jedis.set( "name" ,  "minxr" );  

  37.             String ss = jedis.get( "name" );  

  38.             System.out.println(ss);  

  39.   

  40.              // 很直觀,類似map 將jintao append到已經有的value之後  

  41.             jedis.append( "name" ,  "jintao" );  

  42.             ss = jedis.get( "name" );  

  43.             System.out.println(ss);  

  44.   

  45.              // 2、直接覆蓋原來的數據   

  46.             jedis.set( "name" ,  "jintao" );  

  47.             System.out.println(jedis.get( "jintao" ));  

  48.   

  49.              // 刪除key對應的記錄   

  50.             jedis.del( "name" );  

  51.             System.out.println(jedis.get( "name" )); // 執行結果:null   

  52.   

  53.              /**  

  54.              */   

  55.             jedis.mset( "name" ,  "minxr" ,  "jarorwar" ,  "aaa");  

  56.             System.out.println(jedis.mget( "name" ,  "jarorwar"));  

  57.         }  catch  (Exception e) {  

  58.             e.printStackTrace();  

  59.         }  finally  {  

  60.             RedisUtil.getPool().returnResource(jedis);  

  61.         }  

  62.   

  63.     }  

  64.   

  65.      private   void  testKey() {  

  66.         Jedis jedis = RedisUtil.getJedis();  

  67.         System.out.println( "=============key==========================");  

  68.          // 清空數據   

  69.         System.out.println(jedis.flushDB());  

  70.         System.out.println(jedis.echo( "foo" ));  

  71.          // 判斷key否存在   

  72.         System.out.println(jedis.exists( "foo" ));  

  73.         jedis.set( "key" ,  "values" );  

  74.         System.out.println(jedis.exists( "key" ));  

  75.     }  

  76.   

  77.      public   static   void  testString() {  

  78.         System.out.println( "==String==" );  

  79.         Jedis jedis = RedisUtil.getJedis();  

  80.          try  {  

  81.              // String   

  82.             jedis.set( "key" ,  "Hello World!" );  

  83.             String value = jedis.get( "key" );  

  84.             System.out.println(value);  

  85.         }  catch  (Exception e) {  

  86.             e.printStackTrace();  

  87.         }  finally  {  

  88.             RedisUtil.getPool().returnResource(jedis);  

  89.         }  

  90.   

  91.         System.out.println("=============String==========================" );  

  92.          // 清空數據   

  93.         System.out.println(jedis.flushDB());  

  94.          // 存儲數據   

  95.         jedis.set( "foo" ,  "bar" );  

  96.         System.out.println(jedis.get( "foo" ));  

  97.          // 若key不存在,則存儲   

  98.         jedis.setnx( "foo" ,  "foo not exits" );  

  99.         System.out.println(jedis.get( "foo" ));  

  100.          // 覆蓋數據   

  101.         jedis.set( "foo" ,  "foo update" );  

  102.         System.out.println(jedis.get( "foo" ));  

  103.          // 追加數據   

  104.         jedis.append( "foo" ,  " hello, world" );  

  105.         System.out.println(jedis.get( "foo" ));  

  106.          // 設置key的有效期,並存儲數據   

  107.         jedis.setex( "foo" ,  2 ,  "foo not exits" );  

  108.         System.out.println(jedis.get( "foo" ));  

  109.          try  {  

  110.             Thread.sleep( 3000 );  

  111.         }  catch  (InterruptedException e) {  

  112.         }  

  113.         System.out.println(jedis.get( "foo" ));  

  114.          // 獲取並更改數據   

  115.         jedis.set( "foo" ,  "foo update" );  

  116.         System.out.println(jedis.getSet( "foo" ,  "foo modify" ));  

  117.          // 截取value的值   

  118.         System.out.println(jedis.getrange( "foo" ,  1 ,  3 ));  

  119.         System.out.println(jedis.mset( "mset1" ,  "mvalue1" ,  "mset2",  "mvalue2" ,  

  120.                  "mset3" ,  "mvalue3" ,  "mset4" ,  "mvalue4"));  

  121.         System.out.println(jedis.mget( "mset1" ,  "mset2" ,  "mset3",  "mset4" ));  

  122.         System.out.println(jedis.del( new  String[] {  "foo" , "foo1" ,  "foo3"  }));  

  123.     }  

  124.   

  125.      public   static   void  testList() {  

  126.         System.out.println( "==List==" );  

  127.         Jedis jedis = RedisUtil.getJedis();  

  128.          try  {  

  129.              // 開始前,先移除所有的內容   

  130.             jedis.del( "messages" );  

  131.             jedis.rpush( "messages" ,  "Hello how are you?");  

  132.             jedis.rpush( "messages" , "Fine thanks. I'm having fun with redis." );  

  133.             jedis.rpush( "messages" , "I should look into this NOSQL thing ASAP" );  

  134.   

  135.              // 再取出所有數據jedis.lrange是按範圍取出,   

  136.                

  137.             List<String> values = jedis.lrange( "messages" ,  0, - 1 );  

  138.             System.out.println(values);  

  139.   

  140.         }  catch  (Exception e) {  

  141.             e.printStackTrace();  

  142.         }  finally  {  

  143.             RedisUtil.getPool().returnResource(jedis);  

  144.         }  

  145.   

  146.          // 清空數據   

  147.         System.out.println(jedis.flushDB());  

  148.          // 添加數據   

  149.         jedis.lpush( "lists" ,  "vector" );  

  150.         jedis.lpush( "lists" ,  "ArrayList" );  

  151.         jedis.lpush( "lists" ,  "LinkedList" );  

  152.          // 數組長度   

  153.         System.out.println(jedis.llen( "lists" ));  

  154.          // 排序   

  155.         System.out.println(jedis.sort( "lists" ));  

  156.          // 字串   

  157.         System.out.println(jedis.lrange( "lists" ,  0 ,  3 ));  

  158.          // 修改列表中單個值   

  159.         jedis.lset( "lists" ,  0 ,  "hello list!" );  

  160.          // 獲取列表指定下標的值   

  161.         System.out.println(jedis.lindex( "lists" ,  1 ));  

  162.          // 刪除列表指定下標的值   

  163.         System.out.println(jedis.lrem( "lists" ,  1 ,  "vector" ));  

  164.          // 刪除區間以外的數據   

  165.         System.out.println(jedis.ltrim( "lists" ,  0 ,  1 ));  

  166.          // 列表出棧   

  167.         System.out.println(jedis.lpop( "lists" ));  

  168.          // 整個列表值   

  169.         System.out.println(jedis.lrange( "lists" ,  0 , - 1 ));  

  170.     }  

  171.   

  172.      public   static   void  testSet() {  

  173.         System.out.println( "==Set==" );  

  174.         Jedis jedis = RedisUtil.getJedis();  

  175.          try  {  

  176.             jedis.sadd( "myset" ,  "1" );  

  177.             jedis.sadd( "myset" ,  "2" );  

  178.             jedis.sadd( "myset" ,  "3" );  

  179.             jedis.sadd( "myset" ,  "4" );  

  180.             Set<String> setValues = jedis.smembers( "myset" );  

  181.             System.out.println(setValues);  

  182.   

  183.              // 移除noname   

  184.             jedis.srem( "myset" ,  "4" );  

  185.             System.out.println(jedis.smembers( "myset" )); // 獲取所有加入的value   

  186.             System.out.println(jedis.sismember( "myset" ,  "4" ));// 判斷 minxr   

  187.                                                                  // 是否是sname集合的元素   

  188.             System.out.println(jedis.scard( "sname" )); // 返回集合的元素個數   

  189.         }  catch  (Exception e) {  

  190.             e.printStackTrace();  

  191.         }  finally  {  

  192.             RedisUtil.getPool().returnResource(jedis);  

  193.         }  

  194.   

  195.          // 清空數據   

  196.         System.out.println(jedis.flushDB());  

  197.          // 添加數據   

  198.         jedis.sadd( "sets" ,  "HashSet" );  

  199.         jedis.sadd( "sets" ,  "SortedSet" );  

  200.         jedis.sadd( "sets" ,  "TreeSet" );  

  201.          // 判斷value是否在列表中   

  202.         System.out.println(jedis.sismember( "sets" ,  "TreeSet" ));  

  203.         ;  

  204.          // 整個列表值   

  205.         System.out.println(jedis.smembers( "sets" ));  

  206.          // 刪除指定元素   

  207.         System.out.println(jedis.srem( "sets" ,  "SortedSet" ));  

  208.          // 出棧   

  209.         System.out.println(jedis.spop( "sets" ));  

  210.         System.out.println(jedis.smembers( "sets" ));  

  211.          //   

  212.         jedis.sadd( "sets1" ,  "HashSet1" );  

  213.         jedis.sadd( "sets1" ,  "SortedSet1" );  

  214.         jedis.sadd( "sets1" ,  "TreeSet" );  

  215.         jedis.sadd( "sets2" ,  "HashSet2" );  

  216.         jedis.sadd( "sets2" ,  "SortedSet1" );  

  217.         jedis.sadd( "sets2" ,  "TreeSet1" );  

  218.          // 交集   

  219.         System.out.println(jedis.sinter( "sets1" ,  "sets2" ));  

  220.          // 並集   

  221.         System.out.println(jedis.sunion( "sets1" ,  "sets2" ));  

  222.          // 差集   

  223.         System.out.println(jedis.sdiff( "sets1" ,  "sets2" ));  

  224.     }  

  225.   

  226.      public   static   void  sortedSet() {  

  227.         System.out.println( "==SoretedSet==" );  

  228.         Jedis jedis = RedisUtil.getJedis();  

  229.          try  {  

  230.             jedis.zadd( "hackers" ,  1940 ,  "Alan Kay" );  

  231.             jedis.zadd( "hackers" ,  1953 ,  "Richard Stallman");  

  232.             jedis.zadd( "hackers" ,  1965 ,  "Yukihiro Matsumoto");  

  233.             jedis.zadd( "hackers" ,  1916 ,  "Claude Shannon");  

  234.             jedis.zadd( "hackers" ,  1969 ,  "Linus Torvalds");  

  235.             jedis.zadd( "hackers" ,  1912 ,  "Alan Turing" );  

  236.             Set<String> setValues = jedis.zrange( "hackers" ,  0, - 1 );  

  237.             System.out.println(setValues);  

  238.             Set<String> setValues2 = jedis.zrevrange( "hackers",  0 , - 1 );  

  239.             System.out.println(setValues2);  

  240.         }  catch  (Exception e) {  

  241.             e.printStackTrace();  

  242.         }  finally  {  

  243.             RedisUtil.getPool().returnResource(jedis);  

  244.         }  

  245.   

  246.          // 清空數據   

  247.         System.out.println(jedis.flushDB());  

  248.          // 添加數據   

  249.         jedis.zadd( "zset" ,  10.1 ,  "hello" );  

  250.         jedis.zadd( "zset" ,  10.0 ,  ":" );  

  251.         jedis.zadd( "zset" ,  9.0 ,  "zset" );  

  252.         jedis.zadd( "zset" ,  11.0 ,  "zset!" );  

  253.          // 元素個數   

  254.         System.out.println(jedis.zcard( "zset" ));  

  255.          // 元素下標   

  256.         System.out.println(jedis.zscore( "zset" ,  "zset" ));  

  257.          // 集合子集   

  258.         System.out.println(jedis.zrange( "zset" ,  0 , - 1 ));  

  259.          // 刪除元素   

  260.         System.out.println(jedis.zrem( "zset" ,  "zset!" ));  

  261.         System.out.println(jedis.zcount( "zset" ,  9.5 ,  10.5 ));  

  262.          // 整個集合值   

  263.         System.out.println(jedis.zrange( "zset" ,  0 , - 1 ));  

  264.     }  

  265.   

  266.      public   static   void  testHsh() {  

  267.         System.out.println( "==Hash==" );  

  268.         Jedis jedis = RedisUtil.getJedis();  

  269.          try  {  

  270.             Map<String, String> pairs =  new HashMap<String, String>();  

  271.             pairs.put( "name" ,  "Akshi" );  

  272.             pairs.put( "age" ,  "2" );  

  273.             pairs.put( "sex" ,  "Female" );  

  274.             jedis.hmset( "kid" , pairs);  

  275.             List<String> name = jedis.hmget( "kid" ,  "name" );// 結果是個泛型的LIST   

  276.              // jedis.hdel("kid","age"); //刪除map中的某個鍵值   

  277.             System.out.println(jedis.hmget( "kid" ,  "pwd" )); // 因爲刪除了,所以返回的是null   

  278.             System.out.println(jedis.hlen( "kid" ));  // 返回key爲user的鍵中存放的值的個數   

  279.             System.out.println(jedis.exists( "kid" )); // 是否存在key爲user的記錄   

  280.             System.out.println(jedis.hkeys( "kid" )); // 返回map對象中的所有key   

  281.             System.out.println(jedis.hvals( "kid" )); // 返回map對象中的所有value   

  282.   

  283.             Iterator<String> iter = jedis.hkeys( "kid").iterator();  

  284.              while  (iter.hasNext()) {  

  285.                 String key = iter.next();  

  286.                 System.out.println(key +  ":"  + jedis.hmget("kid" , key));  

  287.             }  

  288.   

  289.             List<String> values = jedis.lrange( "messages" ,  0, - 1 );  

  290.             values = jedis.hmget( "kid" ,  new  String[] { "name" ,  "age" ,  "sex"  });  

  291.             System.out.println(values);  

  292.             Set<String> setValues = jedis.zrange( "hackers" ,  0, - 1 );  

  293.             setValues = jedis.hkeys( "kid" );  

  294.             System.out.println(setValues);  

  295.             values = jedis.hvals( "kid" );  

  296.             System.out.println(values);  

  297.             pairs = jedis.hgetAll( "kid" );  

  298.             System.out.println(pairs);  

  299.         }  catch  (Exception e) {  

  300.             e.printStackTrace();  

  301.         }  finally  {  

  302.             RedisUtil.getPool().returnResource(jedis);  

  303.         }  

  304.   

  305.          // 清空數據   

  306.         System.out.println(jedis.flushDB());  

  307.          // 添加數據   

  308.         jedis.hset( "hashs" ,  "entryKey" ,  "entryValue" );  

  309.         jedis.hset( "hashs" ,  "entryKey1" ,  "entryValue1" );  

  310.         jedis.hset( "hashs" ,  "entryKey2" ,  "entryValue2" );  

  311.          // 判斷某個值是否存在   

  312.         System.out.println(jedis.hexists( "hashs" ,  "entryKey" ));  

  313.          // 獲取指定的值   

  314.         System.out.println(jedis.hget( "hashs" ,  "entryKey" )); // 批量獲取指定的值   

  315.         System.out.println(jedis.hmget( "hashs" ,  "entryKey" , "entryKey1" ));  

  316.          // 刪除指定的值   

  317.         System.out.println(jedis.hdel( "hashs" ,  "entryKey" ));  

  318.          // 爲key中的域 field 的值加上增量 increment   

  319.         System.out.println(jedis.hincrBy( "hashs" ,  "entryKey", 123l));  

  320.          // 獲取所有的keys   

  321.         System.out.println(jedis.hkeys( "hashs" ));  

  322.          // 獲取所有的values   

  323.         System.out.println(jedis.hvals( "hashs" ));  

  324.     }  

  325.   

  326.      public   static   void  testOther()  throws InterruptedException {  

  327.         Jedis jedis = RedisUtil.getJedis();  

  328.   

  329.          try  {  

  330.              // keys中傳入的可以用通配符   

  331.             System.out.println(jedis.keys( "*" ));  // 返回當前庫中所有的key [sose, sanme,   

  332.                                                      // name, jarorwar, foo,   

  333.                                                      // sname, java framework,   

  334.                                                      // user, braand]   

  335.             System.out.println(jedis.keys( "*name" )); // 返回的sname [sname, name]   

  336.             System.out.println(jedis.del( "sanmdde" )); // 刪除key爲sanmdde的對象 刪除成功返回1   

  337.                                                          // 刪除失敗(或者不存在)返回 0   

  338.             System.out.println(jedis.ttl( "sname" )); // 返回給定key的有效時間,如果是-1則表示永遠有效   

  339.             jedis.setex( "timekey" ,  10 ,  "min" ); // 通過此方法,可以指定key的存活(有效時間) 時間爲秒   

  340.             Thread.sleep( 5000 ); // 睡眠5秒後,剩餘時間將爲<=5   

  341.             System.out.println(jedis.ttl( "timekey" ));  // 輸出結果爲5   

  342.             jedis.setex( "timekey" ,  1 ,  "min" );  // 設爲1後,下面再看剩餘時間就是1了   

  343.             System.out.println(jedis.ttl( "timekey" ));  // 輸出結果爲1   

  344.             System.out.println(jedis.exists( "key" )); // 檢查key是否存在   

  345.             System.out.println(jedis.rename( "timekey" ,  "time"));  

  346.             System.out.println(jedis.get( "timekey" )); // 因爲移除,返回爲null   

  347.             System.out.println(jedis.get( "time" ));  // 因爲將timekey 重命名爲time   

  348.                                                      // 所以可以取得值 min   

  349.              // jedis 排序   

  350.                

  351.             jedis.del( "a" ); // 先清除數據,再加入數據進行測試   

  352.             jedis.rpush( "a" ,  "1" );  

  353.             jedis.lpush( "a" ,  "6" );  

  354.             jedis.lpush( "a" ,  "3" );  

  355.             jedis.lpush( "a" ,  "9" );  

  356.             System.out.println(jedis.lrange( "a" ,  0 , - 1 ));// [9, 3, 6, 1]   

  357.             System.out.println(jedis.sort( "a" )); // [1, 3, 6, 9] //輸入排序後結果   

  358.             System.out.println(jedis.lrange( "a" ,  0 , - 1 ));  

  359.         }  catch  (Exception e) {  

  360.             e.printStackTrace();  

  361.         }  finally  {  

  362.             RedisUtil.getPool().returnResource(jedis);  

  363.         }  

  364.   

  365.     }  

  366.   

  367.      @org .junit.Test  

  368.      public   void  testUnUsePipeline() {  

  369.          long  start =  new  Date().getTime();  

  370.   

  371.         Jedis jedis = RedisUtil.getJedis();  

  372.          for  ( int  i =  0 ; i <  10000 ; i++) {  

  373.             jedis.set( "age1"  + i, i +  "" );  

  374.             jedis.get( "age1"  + i); // 每個操作都發送請求給redis-server   

  375.         }  

  376.          long  end =  new  Date().getTime();  

  377.   

  378.         System.out.println( "unuse pipeline cost:" + (end - start) +  "ms" );  

  379.   

  380.         RedisUtil.getPool().returnResource(jedis);  

  381.     }  

  382.   

  383.      @org .junit.Test  

  384.      /**  

  385.      * 參考:http://blog.csdn.net/freebird_lb/article/details/7778919  

  386.      */   

  387.      public   void  testUsePipeline() {  

  388.          long  start =  new  Date().getTime();  

  389.   

  390.         Jedis jedis = RedisUtil.getJedis();  

  391.         jedis.flushDB();  

  392.         Pipeline p = jedis.pipelined();  

  393.          for  ( int  i =  0 ; i <  10000 ; i++) {  

  394.             p.set( "age2"  + i, i +  "" );  

  395.             System.out.println(p.get( "age2"  + i));  

  396.         }  

  397.         p.sync(); // 這段代碼獲取所有的response   

  398.   

  399.          long  end =  new  Date().getTime();  

  400.   

  401.         System.out.println( "use pipeline cost:" + (end - start) +  "ms" );  

  402.   

  403.         RedisUtil.getPool().returnResource(jedis);  

  404.     }  

  405.   

  406.   

  407.      @org .junit.Test  

  408.      /**  

  409.      * 時間複雜度:  

  410.      */   

  411.      public   void  testSort1() {  

  412.          // 排序默認以數字作爲對象,值被解釋爲雙精度浮點數,然後進行比較  

  413.         Jedis redis = RedisUtil.getJedis();  

  414.          // 一般SORT用法 最簡單的SORT使用方法是SORT key。   

  415.         redis.lpush( "mylist" ,  "1" );  

  416.         redis.lpush( "mylist" ,  "4" );  

  417.         redis.lpush( "mylist" ,  "6" );  

  418.         redis.lpush( "mylist" ,  "3" );  

  419.         redis.lpush( "mylist" ,  "0" );  

  420.          // List<String> list = redis.sort("sort");// 默認是升序  

  421.         SortingParams sortingParameters =  new  SortingParams();  

  422.         sortingParameters.desc();  

  423.            

  424.          // 修飾符(modifier)進行排序。   

  425.         sortingParameters.limit( 0 ,  2 ); // 可用於分頁查詢   

  426.         List<String> list = redis.sort( "mylist", sortingParameters); // 默認是升序   

  427.          for  ( int  i =  0 ; i < list.size(); i++) {  

  428.             System.out.println(list.get(i));  

  429.         }  

  430.         redis.flushDB();  

  431.         RedisUtil.closeJedis(redis);  

  432.     }  

  433.   

  434.      @org .junit.Test  

  435.      /**  

  436.      * sort list  

  437.      * LIST結合hash的排序  

  438.      */   

  439.      public   void  testSort2() {  

  440.         Jedis jedis = RedisUtil.getJedis();  

  441.         jedis.del( "user:66" ,  "user:55" ,  "user:33" ,  "user:22",  "user:11" ,  

  442.                  "userlist" );  

  443.         jedis.lpush( "userlist" ,  "33" );  

  444.         jedis.lpush( "userlist" ,  "22" );  

  445.         jedis.lpush( "userlist" ,  "55" );  

  446.         jedis.lpush( "userlist" ,  "11" );  

  447.   

  448.         jedis.hset( "user:66" ,  "name" ,  "66" );  

  449.         jedis.hset( "user:55" ,  "name" ,  "55" );  

  450.         jedis.hset( "user:33" ,  "name" ,  "33" );  

  451.         jedis.hset( "user:22" ,  "name" ,  "79" );  

  452.         jedis.hset( "user:11" ,  "name" ,  "24" );  

  453.         jedis.hset( "user:11" ,  "add" ,  "beijing" );  

  454.         jedis.hset( "user:22" ,  "add" ,  "shanghai" );  

  455.         jedis.hset( "user:33" ,  "add" ,  "guangzhou" );  

  456.         jedis.hset( "user:55" ,  "add" ,  "chongqing" );  

  457.         jedis.hset( "user:66" ,  "add" ,  "xi'an" );  

  458.   

  459.         SortingParams sortingParameters =  new  SortingParams();  

  460.            

  461.         sortingParameters.get( "user:*->name" );  

  462.         sortingParameters.get( "user:*->add" );  

  463. //      sortingParameters.by("user:*->name");   

  464. //      sortingParameters.get("#");   

  465.         List<String> result = jedis.sort( "userlist", sortingParameters);  

  466.          for  (String item : result) {  

  467.             System.out.println( "item...."  + item);  

  468.         }  

  469.          /**  

  470.          * user:*->add  

  471.          */   

  472.     }  

  473.   

  474.      @org .junit.Test  

  475.      /**  

  476.      * sort set  

  477.      * SET結合String的排序  

  478.      */   

  479.      public   void  testSort3() {  

  480.         Jedis jedis = RedisUtil.getJedis();  

  481.         jedis.del( "tom:friend:list" ,  "score:uid:123" , "score:uid:456" ,  

  482.                  "score:uid:789" ,  "score:uid:101" , "uid:123" ,  "uid:456" ,  

  483.                  "uid:789" ,  "uid:101" );  

  484.   

  485.         jedis.sadd( "tom:friend:list" ,  "123" );  // tom的好友列表  

  486.         jedis.sadd( "tom:friend:list" ,  "456" );  

  487.         jedis.sadd( "tom:friend:list" ,  "789" );  

  488.         jedis.sadd( "tom:friend:list" ,  "101" );  

  489.   

  490.         jedis.set( "score:uid:123" ,  "1000" );  // 好友對應的成績  

  491.         jedis.set( "score:uid:456" ,  "6000" );  

  492.         jedis.set( "score:uid:789" ,  "100" );  

  493.         jedis.set( "score:uid:101" ,  "5999" );  

  494.   

  495.         jedis.set( "uid:123" ,  "{'uid':123,'name':'lucy'}" );  // 好友的詳細信息   

  496.         jedis.set( "uid:456" ,  "{'uid':456,'name':'jack'}" );  

  497.         jedis.set( "uid:789" ,  "{'uid':789,'name':'jay'}" );  

  498.         jedis.set( "uid:101" ,  "{'uid':101,'name':'jolin'}" );  

  499.   

  500.         SortingParams sortingParameters =  new  SortingParams();  

  501.   

  502.         sortingParameters.desc();  

  503.          // sortingParameters.limit(0, 2);   

  504.          // 注意GET操作是有序的,GET user_name_* GET user_password_*  

  505.          // 和 GET user_password_* GET user_name_*返回的結果位置不同  

  506.         sortingParameters.get( "#" ); // GET 還有一個特殊的規則—— "GET #"   

  507.                                      // ,用於獲取被排序對象(我們這裏的例子是 user_id )的當前元素。   

  508.         sortingParameters.get( "uid:*" );  

  509.         sortingParameters.get( "score:uid:*" );  

  510.         sortingParameters.by( "score:uid:*" );  

  511.            

  512.          // uid:* get score:uid:*   

  513.         List<String> result = jedis.sort( "tom:friend:list", sortingParameters);  

  514.          for  (String item : result) {  

  515.             System.out.println( "item..."  + item);  

  516.         }  

  517.   

  518.     }  

  519.   

  520.      /**  

  521.      *   

  522.      * 12) "a_long_long_password"  

  523.      */   

  524.      public   void  testSort4() {  

  525.   

  526.     }  

  527.   

  528.      /**  

  529.      *   

  530.      * user_level_* GET # GET user_name_* GET user_password_* STORE 

  531.      * 操作了,只有當結果集過期時,才需要再調用一次 SORT 操作。  

  532.      * 操作,並保存爲結果集),具體參見 SETNX 命令。  

  533.      */   

  534.      @Test   

  535.      public   void  testSort5() {  

  536.          // 排序默認以數字作爲對象,值被解釋爲雙精度浮點數,然後進行比較  

  537.         Jedis jedis = RedisUtil.getJedis();  

  538.          // 一般SORT用法 最簡單的SORT使用方法是SORT key。   

  539.         jedis.lpush( "mylist" ,  "1" );  

  540.         jedis.lpush( "mylist" ,  "4" );  

  541.         jedis.lpush( "mylist" ,  "6" );  

  542.         jedis.lpush( "mylist" ,  "3" );  

  543.         jedis.lpush( "mylist" ,  "0" );  

  544.          // List<String> list = redis.sort("sort");// 默認是升序  

  545.         SortingParams sortingParameters =  new  SortingParams();  

  546.         sortingParameters.desc();  

  547.            

  548.          // 修飾符(modifier)進行排序。   

  549.          // sortingParameters.limit(0, 2);//可用於分頁查詢   

  550.   

  551.            

  552.   

  553.         jedis.sort( "mylist" , sortingParameters,  "mylist" ); // 排序後指定排序結果到一個KEY中,這裏講結果覆蓋原來的KEY   

  554.   

  555.         List<String> list = jedis.lrange( "mylist" ,  0 , - 1 );  

  556.          for  ( int  i =  0 ; i < list.size(); i++) {  

  557.             System.out.println(list.get(i));  

  558.         }  

  559.   

  560.         jedis.sadd( "tom:friend:list" ,  "123" );  // tom的好友列表  

  561.         jedis.sadd( "tom:friend:list" ,  "456" );  

  562.         jedis.sadd( "tom:friend:list" ,  "789" );  

  563.         jedis.sadd( "tom:friend:list" ,  "101" );  

  564.   

  565.         jedis.set( "score:uid:123" ,  "1000" );  // 好友對應的成績  

  566.         jedis.set( "score:uid:456" ,  "6000" );  

  567.         jedis.set( "score:uid:789" ,  "100" );  

  568.         jedis.set( "score:uid:101" ,  "5999" );  

  569.   

  570.         jedis.set( "uid:123" ,  "{'uid':123,'name':'lucy'}" );  // 好友的詳細信息   

  571.         jedis.set( "uid:456" ,  "{'uid':456,'name':'jack'}" );  

  572.         jedis.set( "uid:789" ,  "{'uid':789,'name':'jay'}" );  

  573.         jedis.set( "uid:101" ,  "{'uid':101,'name':'jolin'}" );  

  574.   

  575.         sortingParameters =  new  SortingParams();  

  576.          // sortingParameters.desc();   

  577.         sortingParameters.get( "#" ); // GET 還有一個特殊的規則—— "GET #"   

  578.                                      // ,用於獲取被排序對象(我們這裏的例子是 user_id )的當前元素。   

  579.         sortingParameters.by( "score:uid:*" );  

  580.         jedis.sort( "tom:friend:list" , sortingParameters, "tom:friend:list" );  

  581.         List<String> result = jedis.lrange( "tom:friend:list" ,  0, - 1 );  

  582.          for  (String item : result) {  

  583.             System.out.println( "item..."  + item);  

  584.         }  

  585.   

  586.         jedis.flushDB();  

  587.         RedisUtil.closeJedis(jedis);  

  588.     }  

  589.       

  590.       

  591.      public   void  testMore(){  

  592.          //ZRANGE取出最新的10個項目。   

  593.          //使用LPUSH + LTRIM,確保只取出最新的1000條項目。   

  594.            

  595.            

  596.            

  597.            

  598.          // zrank test a 相反,表示正排序時候的名次   

  599.          // zscore test one表示one這個元素在sorted set中的score爲多少  

  600.            

  601.            

  602.          //zrem test one刪除sorted set中某個元素   

  603.     }  

  604.       

  605.      public  List<String> get_latest_comments( int  start,  int num_items){  

  606.          //獲取最新評論   

  607.          //LPUSH latest.comments <ID>    

  608.          //-我們將列表裁剪爲指定長度,因此Redis只需要保存最新的5000條評論:   

  609.          //LTRIM latest.comments 0 5000    

  610.            

  611.         Jedis jedis = RedisUtil.getJedis();  

  612.         List<String> id_list = jedis.lrange( "latest.comments",start,start+num_items- 1 ) ;  

  613.           

  614.          if (id_list.size()<num_items){  

  615.             //id_list = SQL.EXECUTE("SELECT ... ORDER BY time LIMIT ...");   

  616.         }  

  617.          return  id_list;  

  618.     }  

  619.              

  620.       

  621.   

  622.      @Test   

  623.      public   void  testDB() {  

  624.         Jedis jedis = RedisUtil.getJedis();  

  625.         System.out.println(jedis.select( 0 )); // select db-index   

  626.                                                

  627.         System.out.println(jedis.dbSize()); // dbsize 返回當前數據庫的key數量   

  628.         System.out.println(jedis.keys( "*" ));  // 返回匹配指定模式的所有key   

  629.         System.out.println(jedis.randomKey());  

  630.         jedis.flushDB(); // 刪除當前數據庫中所有key,此方法不會失敗。慎用  

  631.         jedis.flushAll(); // 刪除所有數據庫中的所有key,此方法不會失敗。更加慎用   

  632.   

  633.     }  

  634.   

  635.      @Test   

  636.      public   void  testMget() {  

  637.   

  638.         Jedis jedis = RedisUtil.getJedis();  

  639.         jedis.flushDB(); // 刪除當前數據庫中所有key,此方法不會失敗。慎用  

  640.   

  641.         jedis.rpush( "ids" ,  "aa" );  

  642.         jedis.rpush( "ids" ,  "bb" );  

  643.         jedis.rpush( "ids" ,  "cc" );  

  644.   

  645.         List<String> ids = jedis.lrange( "ids" ,  0 , - 1 );  

  646.   

  647.         jedis.set( "aa" ,  "{'name':'zhoujie','age':20}" );  

  648.         jedis.set( "bb" ,  "{'name':'yilin','age':28}" );  

  649.         jedis.set( "cc" ,  "{'name':'lucy','age':21}" );  

  650.         List<String> list = jedis.mget(ids.toArray( new String[ids.size()]));  

  651.         System.out.println(list);  

  652.     }  

  653.   

  654.      /**  

  655.      * 可以利用lrange對list進行分頁操作  

  656.      */   

  657.      @Test   

  658.      public   void  queryPageBy() {  

  659.          int  pageNo =  6 ;  

  660.          int  pageSize =  6 ;  

  661.         Jedis jedis = RedisUtil.getJedis();  

  662.         jedis.del( "a" );  

  663.          for  ( int  i =  1 ; i <=  30 ; i++) {  

  664.             jedis.rpush( "a" , i +  "" );  

  665.         }  

  666.   

  667.          int  start = pageSize * (pageNo -  1 ); // 因爲redis中list元素位置基數是0   

  668.          int  end = start + pageSize -  1 ;  

  669.   

  670.         List<String> results = jedis.lrange( "a" , start, end);// 從start算起,start算一個元素,到結束那個元素   

  671.          for  (String str : results) {  

  672.             System.out.println(str);  

  673.         }  

  674.   

  675.     }  

  676.   

  677.      @Test   

  678.      /**  

  679.      * [向Redis list壓入ID而不是實際的數據]  

  680.         $ redis-cli incr next.news.id  

  681.         (integer) 1  

  682.         $ redis-cli set news:1:title "Redis is simple"  

  683.         OK  

  684.         $ redis-cli set news:1:url "http://code.google.com/p/redis" 

  685.         OK  

  686.         $ redis-cli lpush submitted.news 1  

  687.         OK  

  688.      */   

  689.      public   void  testListStrUsage() {  

  690.         String title =  "太陽能是綠色能源4" ;  

  691.         String url =  "http://javacreazyer.iteye.com" ;  

  692.         Jedis jedis = RedisUtil.getJedis();  

  693.   

  694.          long  adInfoId = jedis.incr( "ad:adinfo:next.id" );  

  695.         jedis.set( "ad:adinfo:"  + adInfoId +  ":title", title);  

  696.         jedis.set( "ad:adinfo:"  + adInfoId +  ":url" , url);  

  697.         jedis.lpush( "ad:adinfo" , String.valueOf(adInfoId));  

  698.   

  699.         String resultTitle = jedis.get( "ad:adinfo:" + adInfoId +  ":title" );  

  700.         String resultUrl = jedis.get( "ad:adinfo:"  + adInfoId + ":url" );  

  701.         List<String> ids = jedis.lrange( "ad:adinfo" ,  0 , - 1);  

  702.         System.out.println(resultTitle);  

  703.         System.out.println(resultUrl);  

  704.         System.out.println(ids);  

  705.   

  706.          /**  

  707.          */   

  708.         System.out.println(jedis.dbSize());  

  709.   

  710.         jedis.flushAll();  

  711.     }  

  712.   

  713.      /**  

  714.      * (integer) 1 $ redis-cli sadd tag:77:objects 1000 (integer) 1 

  715.      * in our dataset composed of just one object ...  

  716.      */   

  717.      @Test   

  718.      public   void  testSetUsage() {  

  719.         Jedis jedis = RedisUtil.getJedis();  

  720.         jedis.sadd( "zhongsou:news:1000:tags" ,  "1" );  

  721.         jedis.sadd( "zhongsou:news:1000:tags" ,  "2" );  

  722.         jedis.sadd( "zhongsou:news:1000:tags" ,  "5" );  

  723.         jedis.sadd( "zhongsou:news:1000:tags" ,  "77" );  

  724.         jedis.sadd( "zhongsou:news:2000:tags" ,  "1" );  

  725.         jedis.sadd( "zhongsou:news:2000:tags" ,  "2" );  

  726.         jedis.sadd( "zhongsou:news:2000:tags" ,  "5" );  

  727.         jedis.sadd( "zhongsou:news:2000:tags" ,  "77" );  

  728.         jedis.sadd( "zhongsou:news:3000:tags" ,  "2" );  

  729.         jedis.sadd( "zhongsou:news:4000:tags" ,  "77" );  

  730.         jedis.sadd( "zhongsou:news:5000:tags" ,  "1" );  

  731.         jedis.sadd( "zhongsou:news:6000:tags" ,  "5" );  

  732.   

  733.         jedis.sadd( "zhongsou:tag:1:objects" ,  1000  +  "" );  

  734.         jedis.sadd( "zhongsou:tag:2:objects" ,  1000  +  "" );  

  735.         jedis.sadd( "zhongsou:tag:5:objects" ,  1000  +  "" );  

  736.         jedis.sadd( "zhongsou:tag:77:objects" ,  1000  +  "" );  

  737.   

  738.         jedis.sadd( "zhongsou:tag:1:objects" ,  2000  +  "" );  

  739.         jedis.sadd( "zhongsou:tag:2:objects" ,  2000  +  "" );  

  740.         jedis.sadd( "zhongsou:tag:5:objects" ,  2000  +  "" );  

  741.         jedis.sadd( "zhongsou:tag:77:objects" ,  2000  +  "" );  

  742.   

  743.         Set<String> sets = jedis.sinter( "zhongsou:tag:1:objects",  

  744.                  "zhongsou:tag:2:objects" , "zhongsou:tag:5:objects" ,  

  745.                  "zhongsou:tag:77:objects" );  

  746.         System.out.println(sets);  

  747.         jedis.flushAll();  

  748.     }  

  749.   

  750.      @Test   

  751.      public   void  testSortedSetUsage() {  

  752.         Jedis jedis = RedisUtil.getJedis();  

  753.         jedis.zadd( "zhongsou:hackers" ,  1940 ,  "Alan Kay" );  

  754.         jedis.zadd( "zhongsou:hackers" ,  1953 ,  "Richard Stallman");  

  755.         jedis.zadd( "zhongsou:hackers" ,  1943 ,  "Jay" );  

  756.         jedis.zadd( "zhongsou:hackers" ,  1920 ,  "Jellon" );  

  757.         jedis.zadd( "zhongsou:hackers" ,  1965 ,  "Yukihiro Matsumoto");  

  758.         jedis.zadd( "zhongsou:hackers" ,  1916 ,  "Claude Shannon");  

  759.         jedis.zadd( "zhongsou:hackers" ,  1969 ,  "Linus Torvalds");  

  760.         jedis.zadd( "zhongsou:hackers" ,  1912 ,  "Alan Turing" );  

  761.   

  762.         Set<String> hackers = jedis.zrange( "zhongsou:hackers" ,  0, - 1 );  

  763.         System.out.println(hackers);  

  764.   

  765.         Set<String> hackers2 = jedis.zrevrange( "zhongsou:hackers" , 0 , - 1 );  

  766.         System.out.println(hackers2);  

  767.   

  768.            

  769.         Set<String> hackers3 = jedis.zrangeByScore( "zhongsou:hackers",  "-inf" ,  

  770.                  "1920" );  

  771.         System.out.println(hackers3);  

  772.   

  773.            

  774.          long  num = jedis.zremrangeByScore( "zhongsou:hackers" ,  "-inf" ,  "1920" );  

  775.         System.out.println(num);  

  776.   

  777.         jedis.flushAll();  

  778.     }  

  779.   

  780. }  

Java代碼收藏代碼

  1. /**  

  2.  * 獲取連接池.  

  3.  * @return 連接池實例  

  4.  */   

  5. private   static  JedisPool getPool(String ip, int  port) {  

  6.     JedisPoolConfig config =  new  JedisPoolConfig();  

  7.     config.setMaxActive(RedisConfig.getMaxactive());  

  8.     config.setMaxIdle(RedisConfig.getMaxidle());  

  9.     config.setMaxWait(RedisConfig.getMaxwait());  

  10.     config.setTestOnBorrow( true );  

  11.     config.setTestOnReturn( true );  

  12.      try {    

  13.          /**  

  14.          */   

  15.         pool =  new JedisPool(config, ip, port,RedisConfig.getTimeout());  

  16.     }  catch (Exception e) {  

  17.         e.printStackTrace();  

  18.     }  

  19.      return  pool;  

  20. }  

附加一個工作中常用到的Jedis工具類,如下:

Java代碼收藏代碼

  1. package  com.zhongsou.vertportal.util;  

  2.   

  3. import  java.util.HashMap;  

  4. import  java.util.Map;  

  5.   

  6. import  org.slf4j.Logger;  

  7. import  org.slf4j.LoggerFactory;  

  8.   

  9. import  redis.clients.jedis.Jedis;  

  10. import  redis.clients.jedis.JedisPool;  

  11. import  redis.clients.jedis.JedisPoolConfig;  

  12.   

  13. import  com.zhongsou.vertportal.conf.BaseConfig;  

  14. import  com.zhongsou.vertportal.conf.RedisConfig;  

  15.   

  16. /**  

  17.  * Redis工具類,用於獲取RedisPool.  

  18.  * 參考官網說明如下:  

  19.  * To use it, init a pool:  

  20.  *  You can store the pool somewhere statically, it is thread-safe. 

  21.  * @author wujintao  

  22.  */   

  23. public   class  JedisUtil  {  

  24.      protected  Logger log = LoggerFactory.getLogger(getClass());  

  25.       

  26.      /**  

  27.      * 私有構造器.  

  28.      */   

  29.      private  JedisUtil() {  

  30.           

  31.     }  

  32.      private   static  Map<String,JedisPool> maps  =  new HashMap<String,JedisPool>();  

  33.       

  34.       

  35.      /**  

  36.      * 獲取連接池.  

  37.      * @return 連接池實例  

  38.      */   

  39.      private   static  JedisPool getPool(String ip, int  port) {  

  40.         String key = ip+ ":"  +port;  

  41.         JedisPool pool =  null ;  

  42.          if (!maps.containsKey(key)) {  

  43.             JedisPoolConfig config =  new  JedisPoolConfig();  

  44.             config.setMaxActive(RedisConfig.getMaxactive());  

  45.             config.setMaxIdle(RedisConfig.getMaxidle());  

  46.             config.setMaxWait(RedisConfig.getMaxwait());  

  47.             config.setTestOnBorrow( true );  

  48.             config.setTestOnReturn( true );  

  49.              try {    

  50.                  /**  

  51.                  */   

  52.                 pool =  new JedisPool(config, ip, port,RedisConfig.getTimeout());  

  53.                 maps.put(key, pool);  

  54.             }  catch (Exception e) {  

  55.                 e.printStackTrace();  

  56.             }  

  57.         } else {  

  58.             pool = maps.get(key);  

  59.         }  

  60.          return  pool;  

  61.     }  

  62.   

  63.      /**  

  64.      *沒有綁定關係,而且只有被調用到時纔會裝載,從而實現了延遲加載。  

  65.      */   

  66.      private   static   class  RedisUtilHolder{  

  67.          /**  

  68.          * 靜態初始化器,由JVM來保證線程安全  

  69.          */   

  70.          private   static  JedisUtil instance =  new JedisUtil();  

  71.     }  

  72.   

  73.      /**  

  74.      *當getInstance方法第一次被調用的時候,它第一次讀取  

  75.      */   

  76.      public   static  JedisUtil getInstance() {  

  77.          return  RedisUtilHolder.instance;  

  78.     }  

  79.       

  80.      /**  

  81.      * 獲取Redis實例.  

  82.      * @return Redis工具類實例  

  83.      */   

  84.      public  Jedis getJedis(String ip, int  port) {  

  85.         Jedis jedis  =  null ;  

  86.          int  count = 0 ;  

  87.          do {  

  88.              try {   

  89.                 jedis = getPool(ip,port).getResource();  

  90.                  //log.info("get redis master1!");   

  91.             }  catch  (Exception e) {  

  92.                 log.error( "get redis master1 failed!", e);  

  93.                   // 銷燬對象     

  94.                 getPool(ip,port).returnBrokenResource(jedis);    

  95.             }  

  96.             count++;  

  97.         } while (jedis== null &&count<BaseConfig.getRetryNum());  

  98.          return  jedis;  

  99.     }  

  100.   

  101.      /**  

  102.      * 釋放redis實例到連接池.  

  103.      * @param jedis redis實例  

  104.      */   

  105.      public   void  closeJedis(Jedis jedis,String ip, int  port) {  

  106.          if (jedis !=  null ) {  

  107.             getPool(ip,port).returnResource(jedis);  

  108.         }  

  109.     }  

  110. }  

開發參考資料:

redis官方文檔:http://redis.io/documentation

redis命令參考中文版:http://redis.readthedocs.org/en/2.4/index.html

發佈了38 篇原創文章 · 獲贊 111 · 訪問量 59萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章