Redisを使って「急上昇」を実装
やりたいこと
Redisを使って「急上昇」を実装したい
やってみたやりかた
ソート済みセット型のインスタンスとして 以下を使う
- スコアの最新の増減を記録する用:score_diff
- 過去のスコアを記録する用:score
手順
- アイテムのスコアを変動させる
diffは変動量でitem_idはアイテムのIDとする
- アイテムのスコアを変動させる
zincrby score_diff diff item_id
- 一定時間ごとにscoreを更新
その際にweightsで重みを設定することで古いスコア変動の影響を小さくする
score_(n+1) = score_diff_n + 0.7 * score_n = Σ(i, 1→n-1) (0.7 ^ (n-i)) * score_diff_i
zunionstore score 2 score score_diff weights 0.7 1.0 del score_diff
- 現在の急上昇リストを取得
zrevrange score 0 list_size