2

私はリーダーボードを作成するためにredisを使用しており、同じハイスコアを達成したプレーヤーに対処する良い方法を見つけようとしています(同じハイスコアのプレーヤーは、そのハイスコアを最初に達成した人によって順序付けられる必要があります)

私は次のことを考えていました...

zadd leaderboard highscore.timestamp player_id.attempt_number

ただし、 zrevrange を実行すると、タイムスタンプが明らかに間違った順序になります。

入力例:

zadd leaderboard 20.123 5.1
zadd leaderboard 20.125 5.2
zadd leaderboard 20.012 5.3
zadd leaderboard 21.024 5.4

出力:

zrevrange leaderboard 0 -1
5.4
5.2
5.1
5.3

望ましい出力:

5.4
5.3
5.1
5.2
4

1 に答える 1

2

1つのオプションは、実行することですzadd leaderboard highscore.(Long.MAX_VALUE - timestamp) player_id.attempt_number(Long.MAX_VALUEをタイムスタンプの妥当な最大値に変更します-符号付き64ビットintは約3億年分のミリ秒を保存するため、必要ない場合があります)

編集:先行ゼロを追加することを忘れないでください:)

于 2013-03-11T21:44:07.273 に答える