排行榜功能是一個很普遍的需求。使用 Redis 中有序集合的特性來實現排行榜是又好又快的選擇。
一般排行榜都是有實效性的,比如“用戶積分榜”。如果沒有實效性一直按照總榜來排,可能榜首總是幾個老用戶,對于新用戶來說,那真是太令人沮喪了。
首先,來個“今日積分榜”吧,排序規則是今日用戶新增積分從多到少。
那么用戶增加積分時,都操作一下記錄當天積分增加的有序集合。 假設今天是 2015 年 04 月 01 日,UID 為 1 的用戶因為某個操作,增加了 5 個積分。 Redis 命令如下:
bash
ZINCRBY rank:20150401 5 1
假設還有其他幾個用戶也增加了積分:
bash
-
ZINCRBY rank:20150401 1 2
-
ZINCRBY rank:20150401 10 3
看看現在有序集合 rank:20150401 中的數據(withscores 參數可以附帶獲取元素的 score):
bash
ZRANGE rank:20150401 0 -1 withscores
bash
-
1)"2"
-
2)"1"
-
3)"1"
-
<4)"5"