使用Jedis操作Redis-使用Java語言在客戶端操作---對Sorted-Sets的操作


 

 

  1     //對Sorted-Sets操作
  2     /**
  3      * Sorted-Sets和Sets類型極為相似,它們都是字符串的集合,都不允許重復的成員出現在一個Set中。    
  4      *             它們之間的主要差別是Sorted-Sets中的每一個成員都會有一個分數(score)與之關聯,Redis正是通過分數來為集合中的成員進行從小到大的排序。
  5      *             然而需要額外指出的是,盡管Sorted-Sets中的成員必須是唯一的,但是分數(score)卻是可以重復的。
  6      *  在Sorted-Set中添加、刪除或更新一個成員都是非常快速的操作,其時間復雜度為集合中成員數量的對數。
  7      *          由於Sorted-Sets中的成員在集合中的位置是有序的,因此,即便是訪問位於集合中部的成員也仍然是非常高效的。
  8      * @throws Exception
  9      */
 10     @Test
 11     public void testSorted_Sets() throws Exception {
 12         jedis.flushAll();
 13         
 14         //添加一個分數為1的成員
 15         jedis.zadd("myzset", 1, "one");
 16         
 17         Map<String,Double> map = new LinkedHashMap<String,Double>();
 18         map.put("two", (double) 2);
 19         map.put("three", (double) 3);
 20         //添加兩個分數分別是2和3的兩個成員。
 21         jedis.zadd("myzset", map);//這個單獨測一下
 22         
 23         //0表示第一個成員,-1表示最后一個成員。返回的結果中包含每個成員
 24         Set<String> zrange = jedis.zrange("myzset", 0, -1);
 25         System.out.println("zrange="+zrange);//zrange=[one, two, three]
 26         
 27         
 28         
 29         //獲取成員one在Sorted-Set中的位置索引值。0表示第一個位置
 30         Long zrank = jedis.zrank("myzset", "one");
 31         System.out.println("zrank = "+zrank);//zrank = 0
 32         
 33         //成員four並不存在,因此返回null
 34         System.out.println(jedis.zrank("myzset", "four"));//null
 35         
 36         //#返回與myzset關聯的Sorted-Set中,分數滿足表達式1 <= score <= 2的成員的數量。
 37         Long zcount = jedis.zcount("myzset", 1, 2);
 38         System.out.println("zcount="+zcount);//zcount=2
 39         
 40         //獲取myzset鍵中成員的數量。    
 41         System.out.println(jedis.zcard("myzset"));//3
 42         
 43         //刪除成員one和two,返回實際刪除成員的數量。
 44         Long zrem = jedis.zrem("myzset", "one","two");
 45         System.out.println("zrem="+zrem);//zrem=2
 46         
 47         //查看是否刪除成功。 獲取鍵中成員的數量
 48         System.out.println(jedis.zcard("myzset"));//1
 49         
 50         //獲取成員three的分數。返回值是字符串形式。
 51         Double zscore = jedis.zscore("myzset", "three");
 52         System.out.println("zscore="+zscore);//zscore=3.0
 53         
 54         //由於成員two已經被刪除,所以該命令返回null
 55         System.out.println(jedis.zscore("myzset", "two"));//null
 56         
 57         //將成員three的分數增加2,並返回該成員更新后的分數。
 58         Double zincrby = jedis.zincrby("myzset", 2, "three");
 59         System.out.println("zincrby="+zincrby);//zincrby=5.0
 60         
 61         //將成員three的分數增加-1,並返回該成員更新后的分數。
 62         System.out.println(jedis.zincrby("myzset", -1, "three"));//4.0
 63         
 64         //====================》》》》》》
 65         jedis.del("myzset");
 66         
 67         Map<String,Double> map3 = new LinkedHashMap<String,Double>();
 68         map3.put("one", 1.0);
 69         map3.put("two", 2.0);
 70         map3.put("three", 3.0);
 71         map3.put("four", 4.0);
 72         //一次添加多個
 73         jedis.zadd("myzset",map3);
 74         
 75         //獲取分數滿足表達式1 <= score <= 2的成員。
 76         Set<String> zrangeByScore = jedis.zrangeByScore("myzset", 1, 2);
 77         System.out.println("zrangeByScore= "+zrangeByScore);////zrangeByScore= [one, two]
 78         
 79         
 80         
 81         //刪除分數滿足表達式1 <= score <= 2的成員,並返回實際刪除的數量。
 82         Long zremrangeByScore = jedis.zremrangeByScore("myzset", 1, 2);
 83         System.out.println("zremrangeByScore="+zremrangeByScore);//zremrangeByScore=2
 84         
 85         //看出一下上面的刪除是否成功。
 86         System.out.println(jedis.zrange("myzset", 0, -1));//[three, four]
 87         
 88         
 89         //刪除位置索引滿足表達式0 <= rank <= 1的成員。返回實際刪除的數量
 90         Long zremrangeByRank = jedis.zremrangeByRank("myzset", 0, 1);
 91         System.out.println("zremrangeByRank="+zremrangeByRank);//zremrangeByRank=2
 92         
 93         //查看上一條命令是否刪除成功。
 94         Long zcard = jedis.zcard("myzset");
 95         System.out.println("zcard = "+zcard);//zcard = 0
 96         
 97         //======================>>>>>>>>>>>>>>>>>
 98         
 99         jedis.del("myzset");
100         Map<String,Double> map2 = new LinkedHashMap<String,Double>();
101         map2.put("one", 1.0);
102         map2.put("two", 2.0);
103         map2.put("three", 3.0);
104         map2.put("four", 4.0);
105         //一次添加多個
106         jedis.zadd("myzset",map2);
107         
108         //以位置索引從高到低的方式獲取並返回此區間內的成員。
109         Set<String> zrevrange = jedis.zrevrange("myzset", 0, -1);
110         System.out.println("zrevrange="+zrevrange);//zrevrange=[four, three, two, one]
111         
112         Set<String> zrevrange2 = jedis.zrevrange("myzset", 1, 3);
113         System.out.println("zrevrange2="+zrevrange2);//zrevrange2=[three, two, one]
114         
115         //由於是從高到低的排序,所以one的位置是3。
116         System.out.println(jedis.zrevrank("myzset", "one"));//3
117         
118         //由於是從高到低的排序,所以four的位置是0。
119         System.out.println(jedis.zrevrank("myzset", "four"));//0
120         
121         //獲取分數滿足表達式3 >= score >= 0的成員,並以相反的順序輸出,即從高到底的順序。
122         System.out.println(jedis.zrevrangeByScore("myzset", 3, 0));//[three, two, one]
123         
124         System.out.println("數據:="+jedis.zrange("myzset", 0, -1));//數據:=[one, two, three, four]
125         
126         
127         /**
128          * zrangeByScoreWithScores(String key, double min, double max, int offset, int count)
129          *     key:鍵
130          *  min:最小分值
131          *  max:最大分值
132          *  offset:偏移量,也就是從哪個位置開始。
133          *  count:元素個數
134          *  
135          *  返回的元素用ASCII碼表示的,該元素的值用double類型數據表示
136          */
137         System.out.println(jedis.zrangeByScoreWithScores("myzset", 2, 3, 0, 2));//[[[116, 119, 111],2.0], [[116, 104, 114, 101, 101],3.0]]
138 
139     }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM