redis 对于排行榜的需求,redis有一个数据结构非常适合做这件事,那就是有序集合(sorted set)。 redis的有序集合相关命令 有序集合和集合一样可以存储字符串,另外有序集合的成员可以关联一个分数(score),这个分数用于集合排序。下面以投票为例说明常见的命令,vote_activity是有序集合的key。 #给Alice投票 redis> zincrby vote_activity 1 Alice "1" #给Bob投票 redis> zincrby vote_activity 1 Bob "1" #给Alice投票 redis> zincrby vote_activity 1 Alice "2" #查看Alice投票数 redis> zscore vote_activity Alice "2" #获取Alice排名(从高到低,zero-based) redis> zrevrank vote_activity Alice (integer) 0 #获取前10名(从高到低) redis> zrevrange vote_activity 0 9 1) "Alice" 2) "Bob" #获取前10名及对应的分数(从高到低) redis> zrevrange vote_activity 0 9 withscores 1) "Alice" 2) "2" 3) "Bob" 4) "1" #获取总参与选手数 redis> zcard vote_activity (integer) 2 Yii::$app->redis->zincrby("hot",1,"alice")