主页

今天接到一个需求,需要获取一个根据用户的总成绩及地区进行一个排名,参与人数约为20万,原计划直接查库操作,后来考虑到需要将所有数据查出再做排名处理,有可能会查询效率问题,最后决定用redis的有序集合来解决这一问题,大概逻辑如下:
一、返回所有参与用户地市的排名,按照分数从高到低排序

$redis = Redis::connection();
$redisKey = 'user-ranking-list-'.$city.':';//定义当前地市排名
$total = $redis->zcard($redisKey)
$result = $redis->zrangebyscore($redisKey, 0, $total);

二、验证用户是否存在,不存在则直接插入并返回排名,存在即返回当前排名

if($redis->zrevrank($redisKey, $mobile) == null){
    $redis->zadd($redisKey, $score, $mobile);
}
$sort = $redis->zrevrank($redisKey,$mobile)+1;//排名+1

更多有序集合介绍可以参考:https://www.runoob.com/redis/redis-sorted-sets.html

php redis

版权属于:三分快乐,七纷幸福
作品采用:本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
0
查看目录

目录

来自 《redis 有序集合》
评论

三分快乐,七纷幸福
104 文章数
7 评论量
11 分类数
107 页面数
已在风雨中度过 2年246天19小时16分