redis 学习(7) -- 有序集合
zset 结构
- 有序集合:有序、不能包含重复元素
- 每个节点包含:score和value两个属性,根据score进行排序
如图:

zset 重要 API
| 含义 | 命令 |
|---|---|
| zadd key score1 member1 [score2 member2...] | 向有序集合添加一个或多个成员,或者更新已存在成员的分数 |
| zrem key member1 [member2...] | 从有序集合中删除一个或多个成员 |
| zscore key member | 获取有序集合中成员的分数 |
| zincrby key increment member | 对有序集合中指定成员的分数加上增量increment |
| zcard key | 返回有序集合中元素的总个数 |
| zrange key start end [withscores] | 通过索引返回有序集合中指定区间的成员信息 |
| zrangebyscore key min max [withscores][limit] | 通过score返回有序集合中指定分数区间的成员信息 |
| zscore key min max | 返回有序集合中指定分数范围内的元素个数 |
| zremrangebyscore key min max | 删除有序集合中指定分数区间的所有成员 |
| zremrangebyrank key start end | 删除有序集合中给定索引区间的所有成员 |
演示

127.0.0.1:6381> zadd player:rank 1000 ronaldo 900 messi 800 c-ronaldo 600 kaka
(integer) 4
127.0.0.1:6381> zrange player:rank 0 -1
1) "kaka"
2) "c-ronaldo"
3) "messi"
4) "ronaldo"
127.0.0.1:6381> zcount player:rank 700 901
(integer) 2
127.0.0.1:6381> zrangebyscore player:rank 700 901
1) "c-ronaldo"
2) "messi"
127.0.0.1:6381> zremrangebyrank player:rank 0 1
(integer) 2
127.0.0.1:6381> zrange player:rank 0 -1
1) "messi"
2) "ronaldo"
127.0.0.1:6381> zrange player:rank 0 -1 withscores
1) "messi"
2) "900"
3) "ronaldo"
4) "1000"
127.0.0.1:6381>
实战
排行榜功能
使用有序集合,运用zrange,zrangebyscore、zrangebyrank 等命令可以实现排行榜功能。