簡述
- 上一文中簡述了使用StringRedisTemplate操作redis中的set類型,今天來記錄一下操作zset類型的主要方法
代碼
@RunWith(SpringRunner.class) @SpringBootTest public class ZSetDemo { @Autowired private StringRedisTemplate redisTemplate; @Test public void test1() { //向集合中插入元素,並設置分數 redisTemplate.opsForZSet().add("ranking-list", "p1", 2.1); //向集合中插入多個元素 DefaultTypedTuple<String> tuple1 = new DefaultTypedTuple<String>("p2", 1.1); DefaultTypedTuple<String> tuple2 = new DefaultTypedTuple<String>("p3", 3.1); redisTemplate.opsForZSet().add("ranking-list", new HashSet<>(Arrays.asList(tuple1, tuple2))); //打印 printZSet("ranking-list"); } @Test public void test2() { printZSet("ranking-list"); //從集合中刪除指定元素 redisTemplate.opsForZSet().remove("ranking-list", "p1"); printZSet("ranking-list"); } @Test public void test3() { //為指定元素加分 Double score = redisTemplate.opsForZSet().incrementScore("ranking-list", "p1", 2); System.out.println(score);//返回加分后的得分 printZSet("ranking-list"); } @Test public void test4() { //返回指定成員的排名(從小到大) Long rank = redisTemplate.opsForZSet().rank("ranking-list", "p1"); //從大到小 Long reverseRank = redisTemplate.opsForZSet().reverseRank("ranking-list", "p1"); System.out.println(rank); System.out.println(reverseRank); } @Test public void test5() { //返回集合內元素的排名,以及分數(從小到大) Set<TypedTuple<String>> tuples = redisTemplate.opsForZSet().rangeWithScores("ranking-list", 0, -1); for (TypedTuple<String> tuple : tuples) { System.out.println(tuple.getValue() + " : " + tuple.getScore()); } } @Test public void test6() { //返回集合內元素在指定分數范圍內的排名(從小到大) Set<String> ranking = redisTemplate.opsForZSet().rangeByScore("ranking-list", 0, 5); System.out.println(ranking); //帶偏移量和個數,下例意為從第二個開始,要三個 Set<String> ranking2 = redisTemplate.opsForZSet().rangeByScore("ranking-list", 0, 5, 1, 3); System.out.println(ranking2); //也可以帶分數返回,類似於test5 } @Test public void test7() { //返回集合內指定分數范圍的成員個數 Long count = redisTemplate.opsForZSet().count("ranking-list", 0, 2); System.out.println(count); //返回集合內的成員個數 Long size = redisTemplate.opsForZSet().size("ranking-list");//等同於zCard(key); System.out.println(size); } @Test public void test8() { //獲得指定元素的分數 Double score = redisTemplate.opsForZSet().score("ranking-list", "p1"); System.out.println(score); } @Test public void test9() { //刪除指定索引范圍的元素 printZSet("ranking-list"); redisTemplate.opsForZSet().removeRange("ranking-list", 0, 0); printZSet("ranking-list"); } @Test public void test10() { //刪除指定分數范圍內的元素 printZSet("ranking-list"); redisTemplate.opsForZSet().removeRangeByScore("ranking-list", 4, 5); printZSet("ranking-list"); redisTemplate.opsForZSet(); } //求交集並集與set類似 private void printZSet(String key) { //按照排名先后(從小到大)打印指定區間內的元素, -1為打印全部 Set<String> range = redisTemplate.opsForZSet().range(key, 0, -1); //reverseRange 從大到小 System.out.println(range); } }
小禮物走一走,來簡書關注我