私は実際に、redis を使用する作業中のリーダーボード アプリを持っています。ここで確認できます。私のアプリでは、リーダー ボードはトップn
スコアによって制限されており、古いスコアは古すぎると低下します (したがって、日、週、月、年のハイ スコア ボードが存在する可能性があります)。
とにかく、あなたがやろうとしているのは全体的なリーダーボードだと思うので、低いスコアは押しのけられます. Redis Sorted Set スコアの意味で、高いスコアが残り (最下位にある)、低いスコアが残る (上位にある) ように設定した場合、次のようにします。
ZREMRANGBYRANK leaderboard 0 -100
この例では、最後の 100 のスコアを保持することを前提としています。
スコアを反転させると、1000 の「ハイ スコア」が redis に -1000 として保存されるため、ソートされたセットの最初になります。その場合は上記と同じですがZREMRANGEBYRANK leaderboard 100 -1
、最初の 100 件以降のすべてのアイテムを削除するために使用します。
更新:私の例がZREMRANGEBYRANK
非常に単純化されていることに気づきました。
提案されたソリューションも同様に機能するはずです。要素のスコアを見つけたい場合はnth
、これを使用できます。
hundredth_entry = ZRANGE leaderboard 100 100
hundredth_score = ZSCORE leaderboard hundredth_entry
ZREMRANGEBYSCORE leaderboard -inf (hundredth_score
は(
、範囲を包括的にしないようにするためにあります。そのため、100 番目のスコアよりも小さいものはすべて削除されますが、100 番目のスコア自体は削除されません。