Sorted Set 有序集合

Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。

不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

有序集合的成员是唯一的,但分数(score)却可以重复。

集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

ZADD key score member

将所有指定成员添加到键为key有序集合(sorted set)里面

  1. redis> ZADD myzset 1 "one"
  2. (integer) 1
  3. redis> ZADD myzset 1 "uno"
  4. (integer) 1
  5. redis> ZADD myzset 2 "two" 3 "three"
  6. (integer) 2
  7. redis> ZRANGE myzset 0 -1 WITHSCORES
  8. 1) "one"
  9. 2) "1"
  10. 3) "uno"
  11. 4) "1"
  12. 5) "two"
  13. 6) "2"
  14. 7) "three"
  15. 8) "3"
  16. redis>

ZCOUNT key min max

返回有序集key中,score值在min和max之间(默认包括score值等于min或max)的成员

  1. redis> ZADD myzset 1 "one"
  2. (integer) 1
  3. redis> ZADD myzset 2 "two"
  4. (integer) 1
  5. redis> ZADD myzset 3 "three"
  6. (integer) 1
  7. redis> ZCOUNT myzset -inf +inf
  8. (integer) 3
  9. redis> ZCOUNT myzset (1 3
  10. (integer) 2
  11. redis>

ZINCRBY key increment member

为有序集key的成员member的score值加上增量increment

  1. redis> ZADD myzset 1 "one"
  2. (integer) 1
  3. redis> ZADD myzset 2 "two"
  4. (integer) 1
  5. redis> ZINCRBY myzset 2 "one"
  6. "3"
  7. redis> ZRANGE myzset 0 -1 WITHSCORES
  8. 1) "two"
  9. 2) "2"
  10. 3) "one"
  11. 4) "3"
  12. redis>

应用场景

1.带有权重的元素,LOL游戏大区最强王者

2 排行榜

案例

斗地主大赛排名

  • 初始比赛
    127.0.0.1:6379> ZADD doudizhu_rank 0 "player1"
    (integer) 1
    127.0.0.1:6379> ZADD doudizhu_rank 0 "player2"
    (integer) 1
    127.0.0.1:6379> ZADD doudizhu_rank 0 "player3"
    (integer) 1
  • 比赛开始,经过n轮比赛,每次统计,类似计算如下所示
    127.0.0.1:6379> ZINCRBY doudizhu_rank 3 player3
    "3"
    127.0.0.1:6379> ZINCRBY doudizhu_rank -1 player2
    "-1"
    127.0.0.1:6379> ZINCRBY doudizhu_rank -2 player1
    "-2"
  • 比赛结束,进行排名
    127.0.0.1:6379> ZRANGE doudizhu_rank 0 -1
    1) "player1"
    2) "player2"
    3) "player3"
    127.0.0.1:6379> ZRANGE doudizhu_rank 0 -1 withscores
    1) "player1"
    2) "-2"
    3) "player2"
    4) "-1"
    5) "player3"
    6) "3"

逆序排序才对
127.0.0.1:6379> zrevrange doudizhu_rank 0 -1 withscores
1) "player3"
2) "3"
3) "player2"
4) "-1"
5) "player1"
6) "-2"
127.0.0.1:6379>

原文: https://piaosanlang.gitbooks.io/redis/content/01day/sort-set.html