搜尋
首頁Javajava教程使用Redis實現用戶積分排行榜的教程

排行榜功能是一個很普遍的需求。使用 Redis 中有序集合的特性來實現排行榜是又好又快的選擇。 
一般排行榜都是有實效性的,例如「用戶積分榜」。如果沒有實效性一直按照總榜來排,可能榜首總是幾個老用戶,對於新用戶來說,那真是太令人沮喪了。 
首先,來個「今日積分榜」吧,排序規則是今日用戶新增積分從多到少。 
那麼使用者增加積分時,都會操作一下記錄當天積分增加的有序集合。 
假設今天是 2015 年 04 月 01 日,UID 為 1 的使用者因為某個操作,增加了 5 個積分。
Redis 指令如下: 
ZINCRBY rank:20150401 5 1 
假設還有其他幾個使用者也增加了積分: 
ZINCRBY rank:20150401 1 2ZINCRBY rank:2015001 (withscores 參數可附帶取得元素的score): 
ZRANGE rank:20150401 0 -1 withscores1) "2"2) "1"3) "1"4) "5"5) "3"6) "10" 
#p#分頁標題#e# 
依照分數從高到低,取得top10: 
ZREVRANGE rank:20150401 0 9 withscores1) "3"2) "10"3) "1"4) "5"5) "2" 6) "1" 
因為只有三個元素,所以就查詢出了這些資料。 
如果每天記錄當天的積分排行榜,那麼其他花樣百出的清單也就簡單了。
例如「昨日積分榜」: 
ZREVRANGE rank:20150331 0 9 withscores 
利用並集實現多天的積分總和,實現「上週積分榜」: 
ZUNIONSTORE rank:last_week 7 rank2015023015025025:5015:5025025025:5015:5025025025 rank:20150326 rank:20150327 rank:20150328 rank:20150329 WEIGHTS 1 1 1 1 1 1 1 
這樣就將7 天的積分記錄合併到有序集合k:last_week 中了。權重因數 WEIGHTS 如果不給,預設就是 1。為了不隱藏細節,特意寫出。 
那麼查詢上週積分榜 Top10 的資訊是: 
ZREVRANGE rank:last_week 0 9 withscores#p#分頁標題#e# 
「月榜」、「季度榜」、「年度榜」等等就以此類推。 
下面給出一個 PHP 版的簡單實作。使用 Redis 依賴 PHP 擴充 PhpRedis,程式碼也依賴 Carbon 函式庫,用於處理時間。程式碼量很少,所以就不敲註解了。 


<?php
namespace BlogRedis;
use Redis;
use CarbonCarbon;class Ranks { 
 const PREFIX = &#39;rank:&#39;; 
protected $redis = null;  
public function __construct(Redis $redis) { 
   $this->redis = $redis; 
 } 
 public function addScores($member, $scores) {  
  $key = self::PREFIX . date(&#39;Ymd&#39;);  
  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);


陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱工具

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。