Redis に順序付きセットがあります (実際には Python クライアントhttps://github.com/andymccurdy/redis-pyを使用しています)。たとえば、次のようになります。
zadd myset 1 key1
zadd myset 1 key2
zadd myset 1 key3
zadd myset 0 key4
3 つのキーが同じスコアを持つことに注意してください。
ZRANGE を使用して、上位 2 つのエントリ (つまり、最低スコア) を取得したいと考えています。「key4」は値が小さいため、常に最初の結果になりますが、2 番目の戻り値は、key1、key2、key3 の間でランダムに選択されます。ZRANGE は実際には、インデックス付けされた順序でキーを返します。「keys1」は常に 2 番目の結果です。
zrange myset 0 -1 WITHSCORES
1) "key4"
2) "0"
3) "key1"
4) "1"
5) "key2"
6) "1"
7) "key3"
8) "1"
何か案が?ありがとう、J.
Linus G Thielの親切なリクエストに応じて、私のユースケースの詳細を以下に示します。
zsets を使用して単純なランキング システムを実行したいと考えています。アイテムのリストがあり、それぞれにアイテムの関連性を表すスコアがあります。私のシステムのコールド スタートでは、ほとんどのスコアが同一 (つまり 0) になるため、同じスコアを持つアイテムの中からランダムに選択したいと考えています。そうしないと、常にまったく同じ辞書順で返されるため、システムに偏りが生じます。
重複したスコア値ごとに1つの特定のセットを使用して提案するソリューションは機能します。やってみます。
ありがとう、