ホームページ  >  記事  >  データベース  >  Redisを使用してランキング機能を実装する方法

Redisを使用してランキング機能を実装する方法

藏色散人
藏色散人転載
2020-08-13 11:45:244531ブラウズ

次のコラム Redis チュートリアル では、Redis を使用してランキング機能を実装する方法を紹介します。

Redisを使用してランキング機能を実装する方法

#ランキング機能は非常に一般的な要求です。

Redis の順序付きセットの機能を使用してランキングを実装することは、迅速で良い選択です。

「ユーザーポイント一覧」など総合的なランキングが効果的です。効果がなく、常に総合ランキングに基づいてランキングが行われる場合、常に古いユーザーが数名リストの上位に表示される可能性があり、新規ユーザーにとっては非常にイライラします。

まず、「今日のポイントリスト」を見てみましょう。ソートルールは、今日ユーザーが追加した新しいポイントの多い順です。

次に、ユーザーがポイントを追加すると、その日のポイントの増加を記録するオーダード セットを操作します。

今日が 2015 年 4 月 1 日で、UID 1 のユーザーが特定の操作により 5 ポイントを獲得したとします。
Redis コマンドは次のとおりです:

ZINCRBY rank:20150401 5 1

他の数人のユーザーもポイントを追加したと仮定します:

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

現在の順序付きセットのランク:20150401 (withscores パラメーター) のデータを確認します。要素のスコアを取得します):

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

スコアの高い順に上位 10 を取得します:

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

要素が 3 つしかないため、これらのデータがクエリされます。

その日のポイントランキング表を毎日記録していれば、その他のトリックの多いリストはシンプルになります。

例: 「昨日の順位」:

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 です。内容を隠さないように、あえて書きました。

次に、先週の順位の上位 10 位の情報をクエリする場合は、次のようになります:

ZREVRANGE rank:last_week  0 9 withscores

「Monthly List」、「Quarterly List」、「Annual List」など。

以上がRedisを使用してランキング機能を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcnblogs.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。