Redis 基本数据类型之 Zset 类型
基本指令
# zset 相对于 set 多了一个 score 字段,是一个有序的集合,其成员是唯一的,但 score 可以重复
127.0.0.1:6379> zadd myzset 1 one # 向 zset 添加一个值
(integer) 1
127.0.0.1:6379> zadd myzset 2 two
(integer) 1
127.0.0.1:6379> zadd myzset 4 four 3 three # 向 zset 添加多个值
(integer) 2
127.0.0.1:6379> zrange myzset 0 -1
1) "one"
2) "two"
3) "three"
4) "four"
# 如何排序
127.0.0.1:6379> zadd salary 2500 zhangsan
(integer) 1
127.0.0.1:6379> zadd salary 2000 lisi
(integer) 1
127.0.0.1:6379> zadd salary 3000 wangwu
(integer) 1
127.0.0.1:6379> ZRANGEBYSCORE salary -inf +inf # 根据 score 进行排序,从负无穷到正无穷的闭区间,这里注意只能从小到大
1) "lisi"
2) "zhangsan"
3) "wangwu"
127.0.0.1:6379> ZRANGEBYSCORE salary -inf 2500 withscores # 根据 score 进行排序,从负无穷到2500的闭区间,并且展示分数
1) "lisi"
2) "2000"
3) "zhangsan"
4) "2500"
127.0.0.1:6379> ZREVRANGEBYSCORE salary +inf -inf withscores # 倒序排序,参数和上面指令相同,只是最大值最小值反一下
1) "wangwu"
2) "3000"
3) "zhangsan"
4) "2500"
5) "lisi"
6) "2000"
# 删除元素
127.0.0.1:6379> zrem salary zhangsan # 删除集合中的元素
(integer) 1
127.0.0.1:6379> zrange salary 0 -1
1) "lisi"
2) "wangwu"
127.0.0.1:6379> zcard salary # 查看集合中元素的数量
(integer) 2
# 获取指定区间的元素数量
127.0.0.1:6379> zrange myzset 0 -1 withscores
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"
7) "four"
8) "4"
127.0.0.1:6379> zcount myzset 1 3 # 获取 score 为 1 到 3 闭区间的元素数量
(integer) 3
应用场景
- 根据时间排序的新闻列表
- 各种排行榜
- 带权重的队列,便于先执行重要的任务