zoukankan      html  css  js  c++  java
  • RedisTemplate中zset类型的使用

    简述

    • 上一文中简述了使用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);
        }
        
    }
    

    小礼物走一走,来简书关注我

  • 相关阅读:
    HDU 1010 Tempter of the Bone(DFS剪枝)
    HDU 1013 Digital Roots(九余数定理)
    HDU 2680 Choose the best route(反向建图最短路)
    HDU 1596 find the safest road(最短路)
    HDU 2072 单词数
    HDU 3790 最短路径问题 (dijkstra)
    HDU 1018 Big Number
    HDU 1042 N!
    NYOJ 117 求逆序数 (树状数组)
    20.QT文本文件读写
  • 原文地址:https://www.cnblogs.com/zhuyeshen/p/11433801.html
Copyright © 2011-2022 走看看