php redis实现高并发排行榜详解数据库

php redis实现高并发排行榜

为什么用redis做?? 那还不是为了高并发下减少mysql压力(还有因为排行榜数据库比较少可以用redis存)

redis实现高并发下的排行榜逻辑较为复杂

我这里先说下 mysql数据和redis数据保持一致的方法(排行榜redis要存 mysql也要存) 我这里用的是清空redis数据库  然后重新从mysql读取保存到redis 这个方法比较简单

实现如下

$redis->flushall();

$key = ‘rank’;

$zcount = $redis->zCount($key, 0, 10);

if ($zcount == 0) {
//这个地方一定要加分布式锁 因为要保证执行1次(比如1000个人并发 那就是触发1次) 保证执行完才能进行redis操作

$sql = ‘select id,count from cc_player’;
$playerlist = $this->commongetinfo($sql);
$key = ‘rank’;

foreach ($playerlist as $k => $v) {
//如果发现重复id不会重复添加
//zadd key score member
$redis->zAdd($key, $v[‘count’], $v[‘id’]);
}
}

 排序如下

   //withscores 如果是 显示分数$['member']=>key 
       //           如果不是  显示分数$[]=>member 
       //  limit和mysql用法一样 分页用的 
      $ss=$redis->zrevrangebyscore($key,'+inf','-inf',['withscores' => true, 'limit' => [0, 10]]);
 //   增加分数如下 
                $redis->zincrby($key, 1, 107);  当然数据库也要更新 

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/4078.html

(0)
上一篇 2021年7月16日
下一篇 2021年7月16日

相关推荐

发表回复

登录后才能评论