https://blog.csdn.net/qq_41929714/article/details/126461287

1.ZSet存储原理

列表list、集合set、有序集合zset差异

数据结构 是否允许重复元素 是否有序 有序实现方式
列表list 索引下标
集合set \-
有序集合zset 分值score

2.1Redis-zset数据类型:操作命令

zset的命令都是前面+z开头的。

放入集合多个元素

# zadd key [NX|XX] [CH] [INCR] score member [score member ...]
# 放入集合多个元素,并给每个元素分配分值,返回集合大小
127.0.0.1:6379> zadd myzset 10 aaa 20 bbb 30 ccc 5 zzz 36 eee
(integer) 5

升序获取集合元素

# zrange key start stop [WITHSCORES]:升序获取有序集合元素
# WITHSCORES意思就是是否展示分值
127.0.0.1:6379> zrange myzset 0 -1
1) "zzz"
2) "aaa"
3) "bbb"
4) "ccc"
5) "eee"
127.0.0.1:6379> zrange myzset 0 -1 withscores
 1) "zzz"
 2) "5"
 3) "aaa"
 4) "10"
 5) "bbb"
 6) "20"
 7) "ccc"
 8) "30"
 9) "eee"
10) "36"

降序获取集合元素

# zrevrange key start stop [WITHSCORES]:降序获取有序集合元素,rev就是reverse(逆转、颠倒)的缩写
# WITHSCORES意思就是是否展示分值
127.0.0.1:6379> zrevrange myzset 0 -1
1) "eee"
2) "ccc"
3) "bbb"
4) "aaa"
5) "zzz"
127.0.0.1:6379> zrevrange myzset 0 -1 withscores
 1) "eee"
 2) "36"
 3) "ccc"
 4) "30"
 5) "bbb"
 6) "20"
 7) "aaa"
 8) "10"
 9) "zzz"
10) "5"

根据分值获取集合的元素

Redis Zrangebyscore 返回有序集合中指定分数区间的成员列表。有序集成员按分数值递增(从小到大)次序排列。

具有相同分数值的成员按字典序来排列(该属性是有序集提供的,不需要额外的计算)。

默认情况下,区间的取值使用闭区间 (小于等于或大于等于),你也可以通过给参数前增加 ( 符号来使用可选的开区间 (小于或大于)。

# zrangebyscore key min max [WITHSCORES] [LIMIT offset count]:随机获取集合的元素,count为随机获取的个数,默认1
# 返回所有符合条件 5 < score <= 30 的
127.0.0.1:6379> ZRANGEBYSCORE myzset (5 30
1) "aaa"
2) "bbb"
3) "ccc"

# 返回所有符合条件 5 < score < 30 的
127.0.0.1:6379> ZRANGEBYSCORE myzset (5 (30
1) "aaa"
2) "bbb"

# LIMIT offset count:分页偏移量,类似SQL中的limit
127.0.0.1:6379> ZRANGEBYSCORE myzset (5 (30 limit 0 1
1) "aaa"

如何指定范围区间