Redis数据结构详解之Zset

Zset跟Set之间可以有并集运算,因为他们存储的数据字符串集合,不能有一样的成员出现在一个zset中,但是为什么有了set还要有zset呢?zset叫做有序集合,而set是无序的,zset怎么做到有序的呢?就是zset的每一个成员都有一个分数与之对应,并且分数是可以重复的。有序集合的增删改由于有啦排序,执行效率就是非常快速的,即便是访问集合中间的数据也是非常高效的。

下面我来展示下操作zset的redis命令

1、添加,如果值存在添加,将会重新排序。zadd

127.0.0.1:6379>zadd myZSet 1 zlh —添加分数为1,值为zlh的zset集合

127.0.0.1:6379>zadd mySet 2 Tom 3 Jim —添加2条zset集合,分别为分数为2、3,值为tom、jim的集合。

2、查看zset集合的成员个数。zcard

127.0.0.1:6379>zcard myZSet —输出zset的成员个数为3

3、查看Zset指定范围的成员,withscores为输出结果带分数。zrange

127.0.0.1:6379>zrange mZySet 0 -1 —-0为开始,-1为结束,输出顺序结果为: zlh tom jim

127.0.0.1:6379>zrange mZySet 0 -1 withscores —输出带分数的结果为:zlh 1 tom 2 jim 3

4、获取zset成员的下标位置,如果值不存在返回null。zrank

127.0.0.1:6379>zrank mZySet Jim —Jim的在zset集合中的下标为2

5、获取zset集合指定分数之间存在的成员个数。zcount

127.0.0.1:6379>zcount mySet 1 3 —输出分数>=1 and 分数 <=3的成员个数为3,因为分数是可以重复的,所以这个命令是有道理的。

6、删除指定的一个成员或多个成员。zrem

127.0.0.1:6379>zrem myZSet zlh –删除值为zlh的zset成员

127.0.0.1:6379>zrem myZSet Tom Jim —删除值为Tom和Jim的两个zset成员

7、获取指定值的分数。zscore

127.0.0.1:6379>zadd myZset 1 zlh 1 tom 2 jim 3 xdd 4 pmm —由于上面的数据被删除完了,这里添加5条示范数据再。

127.0.0.1:6379>zscore myZset zlh —输出值为zlh的分数为1

8、给指定元素的分数进行增减操作,负值为减,正值为加。zincrby

127.0.0.1:6379>zscore myZset tom —-输出tom的分数为1

127.0.0.1:6379>zincrby myZset 4 tom —tom的分数值加4,输入分数值为5

127.0.0.1:6379>zscore myZset tom —输出tom的分数值为5

9、根据指定分数的范围获取值。zrangebysocre

127.0.0.1:6379>zrangebyscore myZset 1 5 —输出分数>=1 and <=5的成员值为:zlh jim xdd pmm tom

127.0.0.1:6379>zrangebyscore myZset (1 5 —-输出分数>1 and <=5的成员值为:jim xdd pmm tom

127.0.0.1:6379>zrangebyscore myZset 2 5 limit 1 2 —检索分数为2到5之间的数据,然后从下标为1的数据开始往后输出2个数据,包含下标为1的数据。结果为:xdd pmm

127.0.0.1:6379>zrangebyscore myZset -inf +inf limit 2 3 —-+inf表示最后一个成员,-inf表示第一个成员,意思是:检索所有数据,然后从下标为2的数据开始再往后输出2个数据。结果为:xdd pmm tom

10、倒序,从高到底排序输出指定范围的数据。zrevrange,zrevrangebyscore

127.0.0.1:6379>zrevrange myZset 2 3 —先倒序排列数据,输出下标为>=2 and <=3的数据为xdd jim,这里注意的是倒序之后下标也反过来了。

127.0.0.1:6379>zrevrange myZset 2 4 withscores —输出结果为:xdd 3 jim 2 zlh 1

127.0.0.1:6379>zrevrangebyscore myZset 5 1 limit 3 2 —-输出结果为:jim zlh 。获取score <=5 and >=1,从下标为为3开始获取2条数据。

127.0.0.1:6379>zrevrangebyscore myZset 4 2 —-分数>=2 and <=4 的数据倒序输出:pmm xdd jim

11、根据坐标,分数范围删除数据。zremrangebyscore,zremrangebyrank

127.0.0.1:6379>zremrangebyscore myZset 1 2 —删除分数>=1 and <=2的数据

127.0.0.1:6379>zrange myZset 0 -1 —-输出结果为 xdd pmm tom

127.0.0.1:6379>zremrangebyrank myZset 0 2 —删除下标>=0 and <=2的zset元素

127.0.0.1:6379>zrange myZset 0 -1 –输出结果为:empty list or set 。没数据啦。

操作多个zset的redis命令
1、求多个zset的并集

127.0.0.1:6379>zadd myZset 1 zlh 2 jim 3 tom —添加3个数据

127.0.0.1:6379>zadd youZset 1 zlh 2 xdd 3 pmm —添加3个数据

127.0.0.1:6379>zunionzstore heZset 2 myZset youZset —-将myzset和youzset的并集添加到hezset中。

2、求多个zset的交集

127.0.0.1:6379>zinterstore sheZset 2 myZset youZset —-将myzset和youZset 的交集添加到sheZset中。

好一个大布丁 CSDN认证博客专家 Java Redis 分布式
手游服务器研发工程师。有参与射击类型手游《雷霆战机》。MMO《末日危机》,SLG+ARPG《末日生存》开发经验。现在主要研究全球游戏服务器SLG类型游戏开发。研究分布式和微服务在游戏服务器中的应用。
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页