有序集合 zset 和 set 很像,都是字符串的集合,都不允许重复的成员出现在一个 set 中。
他们的区别在于有序集合中每一个成员都有一个分数(score)与之关联,redis 正是通过分数来对集合里的成员进行从小到大的排序。
尽管有序集合中的成员必须是惟一的,但是分数(score)却可以重复。
应用场景:可以用于一个大型的在线游戏积分排行榜,当玩家的积分发生变化时,可以执行 zadd 更新玩家分数(score),此后再通过自然可获取 top ten 的用户信息。
zadd 添加元素 里面包括评分和值
假如此元素在集合里面已经有了,则覆盖
127.0.0.1:6379> zadd zset1 5 a 4 b 6 c
(integer) 3
127.0.0.1:6379> zadd zset1 7 c
(integer) 0
zscore 获取元素的评分
127.0.0.1:6379> zscore zset1 c
"7"
zcard 查看集合里的元素个数
127.0.0.1:6379> zcard zset1
(integer) 2
zrange 是查找元素
-1代表是最后一个
127.0.0.1:6379> zrange zset1 0 -1
1) "b"
2) "a"
3) "c
withscores 把评分也显示出来
127.0.0.1:6379> zrange zset1 0 -1
1) "b"
2) "a"
127.0.0.1:6379> zrange zset1 0 -1 withscores
1) "b"
2) "4"
3) "a"
4) "5"
zrevrange 降序排列
127.0.0.1:6379> zrevrange zset1 0 -1 withscores
1) "a"
2) "5"
3) "b"
4) "4"
zrangebyscore 根据评分范围来查找元素
127.0.0.1:6379> zadd zset1 6 d 12 s 1 g
(integer) 3
127.0.0.1:6379> zrange zset1 0 -1 withscores
1) "g"
2) "1"
3) "b"
4) "4"
5) "a"
6) "5"
7) "d"
8) "6"
9) "s"
10) "12"
127.0.0.1:6379> zrangebyscore zset1 0 10
1) "g"
2) "b"
3) "a"
4) "d"
limit 限定查找起始 类似分页
127.0.0.1:6379> zrangebyscore zset1 0 10 limit 0 2
1) "g"
2) "b"
zrem 删除元素
127.0.0.1:6379> zrem zset1 c
(integer) 1
zremrangebyrank 根据排名来删除元素 删除3个
127.0.0.1:6379> zremrangebyrank zset1 0 2
(integer) 3
127.0.0.1:6379> zrange zset1 0 -1 withscores
1) "d"
2) "6"
3) "s"
4) "12"
zremrangebyscore 根据具体评分范围来删除元素
127.0.0.1:6379> zrange zset1 0 -1 withscores
1) "d"
2) "6"
3) "s"
4) "12"
127.0.0.1:6379> zremrangebyscore zset1 10 20
(integer) 1
127.0.0.1:6379> zrange zset1 0 -1 withscores
1) "d"
2) "6"
zincrby 给指定元素加分
127.0.0.1:6379> zrange zset1 0 -1 withscores
1) "d"
2) "6"
127.0.0.1:6379> zincrby zset1 5 d
"11"
zcount 查找指定评分范围的元素个数
127.0.0.1:6379> zcount zset1 10 20
(integer) 1