麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 數據庫 > Redis > 正文

使用Redis實現用戶積分排行榜的教程

2020-03-17 12:43:01
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了使用Redis實現用戶積分排行榜的教程,包括一個用PHP腳本進行操作的例子,需要的朋友可以參考下

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

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

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

那么用戶增加積分時,都操作一下記錄當天積分增加的有序集合。

假設今天是 2015 年 04 月 01 日,UID 為 1 的用戶因為某個操作,增加了 5 個積分。

Redis 命令如下:

 

  1. ZINCRBY rank:20150401 5 1 


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

 

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

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

 

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

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

 

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

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

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

比如“昨日積分榜”:

 

 
  1. ZREVRANGE rank:20150331 0 9 withscores 

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

 

 
  1. 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 的信息就是:

 

 
  1. ZREVRANGE rank:last_week 0 9 withscores 

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

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

 

 
  1. <?php 
  2.  
  3. namespace Blog/Redis; 
  4.  
  5. use /Redis; 
  6. use Carbon/Carbon; 
  7.  
  8.  
  9. class Ranks { 
  10.  
  11. const PREFIX = 'rank:'
  12.  
  13. protected $redis = null; 
  14.  
  15.  
  16. public function __construct(Redis $redis) { 
  17. $this->redis = $redis
  18.  
  19.  
  20. public function addScores($member$scores) { 
  21. $key = self::PREFIX . date('Ymd'); 
  22. return $this->redis->zIncrBy($key$scores$member); 
  23.  
  24.  
  25. protected function getOneDayRankings($date$start$stop) { 
  26. $key = self::PREFIX . $date
  27. return $this->redis->zRevRange($key$start$stop, true); 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产91久久久久久 | 国产精品一区二区手机在线观看 | 免费淫视频 | 亚洲资源在线播放 | 成人一区二区三区四区 | 一区二区三区国产视频 | 日本在线不卡一区二区三区 | 黄色av电影在线播放 | 久久精品一区二区三区不卡牛牛 | 日韩视频一区二区三区四区 | 91精品国产综合久久婷婷香 | 欧美一级特黄aaaaaaa什 | 中文字幕视频在线播放 | 国产一精品一av一免费爽爽 | 免费激情网址 | 欧美第1页 | 国产成年人视频网站 | 国产精品午夜一区 | 黄色片视频免费观看 | 亚洲午夜天堂吃瓜在线 | 天天透天天狠天天爱综合97 | 男女无遮挡羞羞视频 | 亚洲成人免费影视 | 欧美xxxxx视频 | 精品在线免费播放 | 一级免费 | 成人午夜在线免费视频 | 精品乱码久久久久 | 爱高潮www亚洲精品 欧美黄色一级片视频 | 婷婷久久综合九色综合色多多蜜臀 | 成av人在线观看 | 久久青草热| av在线更新 | 中文字幕精品一二三四五六七八 | 一本色道久久综合亚洲精品图片 | 香蕉久草视频 | 美女羞羞视频网站 | 亚洲自拍第一 | 亚洲国产精品一区二区久久 | 欧美精品一区二区久久久 | 午夜国产在线观看 |