<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      使用 Redis 實現排行榜功能

      排行榜功能是一個很普遍的需求。使用 Redis 中有序集合的特性來實現排行榜是又好又快的選擇。

      一般排行榜都是有實效性的,比如“用戶積分榜”。如果沒有實效性一直按照總榜來排,可能榜首總是幾個老用戶,對于新用戶來說,那真是太令人沮喪了。

      首先,來個“今日積分榜”吧,排序規則是今日用戶新增積分從多到少。

      那么用戶增加積分時,都操作一下記錄當天積分增加的有序集合。
      假設今天是 2015 年 04 月 01 日,UID 為 1 的用戶因為某個操作,增加了 5 個積分。
      Redis 命令如下:

      ZINCRBY rank:20150401 5 1
      

      假設還有其他幾個用戶也增加了積分:

      ZINCRBY rank:20150401 1 2
      ZINCRBY rank:20150401 10 3
      

      看看現在有序集合 rank:20150401 中的數據(withscores 參數可以附帶獲取元素的 score):

      ZRANGE rank:20150401 0 -1 withscores
      
      1) "2"
      2) "1"
      3) "1"
      4) "5"
      5) "3"
      6) "10"
      

      按照分數從高到低,獲取 top10:

      ZREVRANGE rank:20150401 0 9 withscores
      
      1) "3"
      2) "10"
      3) "1"
      4) "5"
      5) "2"
      6) "1"
      

      因為只有三個元素,所以就查詢出了這些數據。

      如果每天記錄當天的積分排行榜,那么其他花樣百出的榜單也就簡單了。
      比如“昨日積分榜”:

      ZREVRANGE rank:20150331 0 9 withscores
      

      利用并集實現多天的積分總和,實現“上周積分榜”:

      ZUNIONSTORE rank:last_week 7 rank:20150323 rank:20150324 rank:20150325 rank:20150326 rank:20150327 rank:20150328 rank:20150329 WEIGHTS 1 1 1 1 1 1 1
      

      這樣就將 7 天的積分記錄合并到有序集合 rank:last_week 中了。權重因子 WEIGHTS 如果不給,默認就是 1。為了不隱藏細節,特意寫出。
      那么查詢上周積分榜 Top10 的信息就是:

      ZREVRANGE rank:last_week  0 9 withscores
      

      “月度榜”、“季度榜”、“年度榜”等等就以此類推。

      下面給出一個 PHP 版的簡單實現。使用 Redis 依賴于 PHP 擴展 PhpRedis,代碼還依賴于 Carbon 庫,用于處理時間。代碼量很少,所以就不敲注釋了。

       
      <?php
      
      namespace Blog\Redis;
      
      use \Redis;
      use Carbon\Carbon;
      
      
      class Ranks {
      
          const PREFIX = 'rank:';
      
          protected $redis = null;
      
      
          public function __construct(Redis $redis) {
              $this->redis = $redis;
          }
      
      
          public function addScores($member, $scores) {
              $key = self::PREFIX . date('Ymd');
              return $this->redis->zIncrBy($key, $scores, $member);
          }
      
      
          protected function getOneDayRankings($date, $start, $stop) {
              $key = self::PREFIX . $date;
              return $this->redis->zRevRange($key, $start, $stop, true);
          }
      
      
          protected function getMultiDaysRankings($dates, $outKey, $start, $stop) {
              $keys = array_map(function($date) {
                  return self::PREFIX . $date;
              }, $dates);
      
              $weights = array_fill(0, count($keys), 1);
              $this->redis->zUnion($outKey, $keys, $weights);
              return $this->redis->zRevRange($outKey, $start, $stop, true);
          }
      
      
          public function getYesterdayTop10() {
              $date = Carbon::now()->subDays(1)->format('Ymd');
              return $this->getOneDayRankings($date, 0, 9);
          }
      
      
          public static function getCurrentMonthDates() {
              $dt = Carbon::now();
              $days = $dt->daysInMonth;
      
              $dates = array();
              for ($day = 1; $day <= $days; $day++) {
                  $dt->day = $day;
                  $dates[] = $dt->format('Ymd');
              }
              return $dates;
          }
      
      
          public function getCurrentMonthTop10() {
              $dates = self::getCurrentMonthDates();
              return $this->getMultiDaysRankings($dates, 'rank:current_month', 0, 9);
          }
      
      }
      

       

      posted @ 2016-08-08 11:01  去.玩兒  閱讀(2702)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产一区二区不卡91| 男人的天堂va在线无码| 国产很色很黄很大爽的视频| 国产精品99精品久久免费| 内射囯产旡码丰满少妇| 亚洲欧美人成电影在线观看| 久久青青草原亚洲AV无码麻豆| 亚洲综合精品一区二区三区| 韩国美女福利视频一区二区| 日韩激情成人| 国产精品v片在线观看不卡| 人人入人人爱| 真人在线射美女视频在线观看| 国产精品大全中文字幕| 九月婷婷人人澡人人添人人爽| 久久精品国产99国产精品严洲| 国产在线乱子伦一区二区| 亚洲欧洲日产国产 最新| 国产精品午夜福利视频| 四虎精品免费永久免费视频| 午夜激情小视频一区二区| 日夜啪啪一区二区三区| 国产精品特级毛片一区二区三区| 国产国产午夜福利视频| 激情综合色综合啪啪开心| 五十路丰满中年熟女中出| 国产曰批视频免费观看完| 精品人妻无码中文字幕在线| 亚洲综合在线日韩av| 你懂的一区二区福利视频| 高清日韩一区二区三区视频| 中文字幕有码日韩精品| 欧美色aⅴ欧美综合色| 亚洲av永久一区二区| 色吊丝二区三区中文字幕| 国产精品三级在线观看无码| 国内永久福利在线视频图片| 国产精品国产三级国快看| 午夜福利理论片高清在线| 国产一二三区在线| 中文字幕亚洲制服在线看|