ランキング機能は非常に一般的な需要です。 Redis の順序付きコレクション機能を使用してランキングを実装するのは、迅速で良い選択です。
「ユーザーポイント一覧」など総合ランキングが有効です。効果がなく、常に総合的なランキングに基づいてランキングが行われる場合、新規ユーザーにとっては常に少数の古いユーザーがリストの上位に表示される可能性があります。
まず、「今日のポイントリスト」を見てみましょう。ソートルールは、今日ユーザーによって追加された新しいポイントの順です。
その後、ユーザーがポイントを追加すると、その日のポイントの増加を記録する順序付けされたコレクションが操作されます。
今日が 2015 年 4 月 1 日で、UID 1 のユーザーが特定の操作により 5 ポイントを獲得したとします。
Redis コマンドは次のとおりです:
ZINCRBY ランク:20150401 5 1
他の数人のユーザーもポイントを追加したと仮定します:
ZINCRBY ランク:20150401 1 2ZINCRBY ランク:20150401 10 3
現在の順序セット ランクのデータを確認します。 20150401 (要素のスコアを取得するには withscores パラメーターを使用できます):
ZRANGE ランク:20150401 0 -1 withscores1) "2"2) "1"3) "1"4) "5"5) "3" 6) "10"
#p#ページングタイトル#e#
スコアの高いものから低いものに従って、トップ10を取得します:
ZREVRANGE ランク:20150401 0 9 withscores1) "3"2) "10"3) "1"4 ) "5" 5) "2" 6) "1"
要素が 3 つしかないため、これらのデータがクエリされます。
その日のポイントランキングリストを毎日記録すれば、その他の様々な仕掛けを施したリストもシンプルになります。
例: 「昨日の順位」:
ZREVRANGE ランク:20150331 0 9 withscores
Union を使用して複数日のポイントの合計を達成し、「先週の順位」を達成します:
ZUNIONSTORE ランク:last_week 7 ランク:20150323 ランク:20150324 ランク:20150325 ランク:20150326 ランク:20150327 ランク:20150328 ランク:20150329 重み 1 1 1 1 1 1 1
このようにして、7 日間のポイント記録が順序付けされたセット Rank:last_week にマージされます。重み係数 WEIGHTS 指定しない場合、デフォルトは 1 です。内容を隠さないように、あえて書きました。
先週の順位のトップ 10 をクエリするための情報は次のとおりです:
ZREVRANGE Rank:last_week 0 9 withscores#p#Paging title#e#
「月間リスト」、「四半期リスト」、「年間リスト」などを使用できます。このように推測されます。
以下は PHP バージョンの簡単な実装です。 Redis の使用は PHP 拡張機能 PhpRedis に依存し、コードの処理時間も Carbon ライブラリに依存します。コードの量は非常に少ないので、コメントは省略します。