有序集合SortedSet实战之简介与常用命令

  • Redis有序集合和集合一样也是string类型元素的集合,且不允许重复的成员
  • 不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序
  • 有序集合的成员是唯一的,但分数(score)却可以是重复的
  • 集合是通过哈希表实现的,所以添加、删除、查找的时间复杂度为O(1)。集合中最大的成员数为2^32 -1,每个集合可存储40多亿个成员。

常见命令

zadd sortset 1 a

zadd sortset 2 b

zadd sortset 3 c

zadd sortset 0 d

zrange sortset 0 10 //默认的是从小到大排序

zrange sortset 0 10 withscores//得到对应的分数

zcard key:获取有序集合的成员 数

zcount key min max:计算在有序集合总指定区间分数的成员数 

zincrby key increment member

zrank key member://返回member在集合中的索引(从大排到小)

zrevrank key member//返回member在集合中的索引(从小排到大)

zrem key member://移除集合中的member成员

zscore key member//获取member的得分

JavaSE集合体系中的Set+List的结合体,元素唯一、有序存储! SCORE分数值

API练习

@Test
    public void method4(){
        final String key = "SpringBootRedis:SortedSet:10010:V1";
        redisTemplate.delete(key);

        ZSetOperations<String, String> zSetOperations = redisTemplate.opsForZSet();
        zSetOperations.add(key, "a", 8.0);
        zSetOperations.add(key, "b", 2.0);
        zSetOperations.add(key, "c", 4.0);
        zSetOperations.add(key, "d", 6.0);
        zSetOperations.add(key, "f", 1.0);

        long size = zSetOperations.size(key);
        log.info("--有序集合SortedSet-成员数:{}", size);
        log.info("--有序集合SortedSet-按照分数正序:{}", zSetOperations.range(key, 0L, size));
        log.info("--有序集合SortedSet-按照分数倒序:{}", zSetOperations.reverseRange(key, 0L, size));
        log.info("--有序集合SortedSet-获取成员a的得分:{}", zSetOperations.score(key, "a"));
        log.info("--有序集合SortedSet-获取成员c的得分:{}", zSetOperations.score(key, "c"));

        log.info("--有序集合SortedSet-正序中d的排名:{} 名", zSetOperations.rank(key, "d"));
        log.info("--有序集合SortedSet-倒序中d的排名:{} 名", zSetOperations.reverseRank(key, "d"));

        zSetOperations.incrementScore(key, "b", 8.0);
        log.info("--为元素b加10分后,有序集合SortedSet-按照分数倒数:{}", zSetOperations.reverseRange(key, 0L, size));

        zSetOperations.remove(key, "b");
        log.info("--移除元素b后有序集合SortedSet-按照分数倒数:{}", zSetOperations.range(key, 0L, zSetOperations.size(key)));
        log.info("--有序集合SortedSet-取出分数区间0-7的成员:{}", zSetOperations.range(key, 0, 7));

        log.info("--有序集合SortedSet-取出带分数的排好序的成员");
        Set<ZSetOperations.TypedTuple<String>> set = zSetOperations.rangeWithScores(key, 0, zSetOperations.size(key));
        set.forEach(tuple -> {
            log.info("--当前成员:{}, 对应的分数:{}", tuple.getValue(), tuple.getScore());
        });
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_37841366/article/details/109145925