ソートされたセットとリストを使用して実装している3つのスコアボードが必要なアプリを構築しています。アプリは、redisクライアントのnode_redis(https://github.com/mranney/node_redis)モジュールを使用してnode.jsで実行されています。
最初のスコアボードは、私がリストを使用している「最新のスコア」ですLPUSH
。ZADD
2つ目は、コマンドで並べ替えられたリストを使用している、これまでにない高得点です。
「今週のハイスコア」の実装に問題があります。1週間セットで使っZADD
て別のソートリストを使うべきだと思っていました。EXPIRE
それはすべて正常に機能しますが、リストが初めて期限切れになった後も、新しいリストに永久に追加され続けます。
自動更新するために期限切れにするredisコマンドはありますか?(私はここ数時間答えを探していましたが、答えはノーのようです)。プログラムでこれを行う必要があるという結論に達しました。TTL
セットを使用する関数呼び出し中に、が-1であるかどうかを確認し、そこでリセットすることができました。これはベストプラクティスですか?私はどこかで巧妙なトリックを逃していますか?追加のデータベース要求について心配する必要がありますか?
- 編集 -
ツイッターでこの質問に返信しましたhttps://twitter.com/redsmin/status/302177241167691777
推奨される解決策(私が正しく理解している場合)はEXPIREAT
、それぞれと一緒にコマンドを使用することですZADD
expireat myscoreboard {{timestamp of the end of the week}}
zadd myscoreboard 1 "one"
これは私には正しいと感じますが、私はredisを初めて使用するので、この手法や問題を解決する他の方法について話し合っていただければ幸いです。