1、简介
Redis中所有的的数据结构都是通过一个唯一的字符串key来获取相应的value数据。
Redis有5种基础数据结构,分别是:
string(字符串)
list(列表)
hash(字典)
set(集合)
zset(有序集合)
其中list、set、hash、zset这四种数据结构是容器型数据结构,它们共享下面两条通用规则:
create if not exists:容器不存在则创建
drop if no elements:如果容器中没有元素,则立即删除容器,释放内存
本文讲述的是Redis的5种基础数据结构中的zset(有序集合)
2、zset(有序集合)相关介绍
2.1 zset(有序集合)的内部结构
zset(有序集合)是Redis中最常问的数据结构。它类似于Java语言中的SortedSet和HashMap的结合体,它一方面通过set来保证内部value值的唯一性,另一方面通过value的score(权重)来进行排序。这个排序的功能是通过Skip List(跳跃列表)来实现的。
zset(有序集合)的最后一个元素value被移除后,数据结构被自动删除,内存被回收。
2.2 zset(有序集合)的相关使用场景
利用zset的去重和有序的效果可以由很多使用场景,举两个例子:
存储粉丝列表,value是粉丝的ID,score是关注时间戳,这样可以对粉丝关注进行排序
存储学生成绩,value使学生的ID,score是学生的成绩,这样可以对学生的成绩排名
3、zset(有序集合)相关指令
1、zadd -> 向集合中添加元素,集合不存在则新建,key代表zset集合名称,score代表元素的权重,member代表元素
zadd key [NX|XX] [CH] [INCR] score member [score member …]
2、zrange -> 按照score权重从小到大排序输出集合中的元素,权重相同则按照value的字典顺序排序([lexicographical order])
超出范围的下标并不会引起错误。 比如说,当 start 的值比有序集的最大下标还要大,或是 start > stop 时, zrange 命令只是简单地返回一个空列表。 另一方面,假如 stop 参数的值比有序集的最大下标还要大,那么 Redis 将 stop 当作最大下标来处理。
可以通过使用 WITHSCORES 选项,来让成员和它的 score 值一并返回,返回列表以 value1,score1, …, valueN,scoreN 的格式表示。 客户端库可能会返回一些更复杂的数据类型,比如数组、元组等。
zrange key start stop [WITHSCORES]
————————————————
版权声明:本文为CSDN博主「李子捌」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_41125219/article/details/1185596913、zrevrange -> 按照score权重从大到小输出集合中的元素,权重相同则按照value的字典逆序排序
其中成员的位置按 score 值递减(从大到小)来排列。 具有相同 score 值的成员按字典序的逆序(reverse lexicographical order)排列。 除了成员按 score 值递减的次序排列这一点外, ZREVRANGE 命令的其他方面和 ZRANGE key start stop [WITHSCORES] 命令一样。
zrevrange key start stop [WITHSCORES]
1127.0.0.1:6379> zrange name 0 -1 WITHSCORES # 输出全部元素 21) "wangwu" 32) "9.9000000000000004" 43) "tianqi" 54) "10" 65) "zhangsan" 76) "10" 87) "lisi" 98) "10.1" 10127.0.0.1:6379> zrangebyscore name 9 10 111) "wangwu" 122) "tianqi" 133) "zhangsan" 14127.0.0.1:6379> zrangebyscore name 9 10 WITHSCORES # 输出分数 151) "wangwu" 162) "9.9000000000000004" 173) "tianqi" 184) "10" 195) "zhangsan" 206) "10" 21127.0.0.1:6379> zrangebyscore name -inf 10 # -inf 从负无穷开始 221) "wangwu" 232) "tianqi" 243) "zhangsan" 25127.0.0.1:6379> zrangebyscore name -inf +inf # +inf 直到正无穷 261) "wangwu" 272) "tianqi" 283) "zhangsan" 294) "lisi" 30127.0.0.1:6379> zrangebyscore name (10 11 # 10 < score <=11 311) "lisi" 32127.0.0.1:6379> zrangebyscore name (10 (10.1 # 10 < socre < -11 33(empty list or set) 34127.0.0.1:6379> zrangebyscore name (10 (11 351) "lisi"