zoukankan      html  css  js  c++  java
  • 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);  当然数据库也要更新 
  • 相关阅读:
    Resample the mask
    高斯消元法
    java中的大数BigInteger
    JAVA中如何使用SORT从大到小排
    Java中Array.sort()的几种用法简明教程 (需要初始化要排序的对象)
    java中两个字符串如何比较大小
    java数组初始化函数
    BestCoder Round #89 Fxx and string
    Flooded!
    基础练习 数列排序
  • 原文地址:https://www.cnblogs.com/newmiracle/p/13913698.html
Copyright © 2011-2022 走看看