首頁  >  文章  >  資料庫  >  如何使用Redis實現排行榜功能

如何使用Redis實現排行榜功能

藏色散人
藏色散人轉載
2020-08-13 11:45:244545瀏覽

以下由Redis教學專欄為大家介紹使用Redis實作排行榜功能的方法,希望對需要的朋友有幫助!

如何使用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

「月度榜」、「季度榜」、「年度榜」等等就以此類推。

以上是如何使用Redis實現排行榜功能的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:cnblogs.com。如有侵權,請聯絡admin@php.cn刪除