Redis Sorted Set 有序集合
Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1(4294967295, 每个集合可存储40多亿个成员)。
应用场景
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>