Redis:配列またはソートされたセットの要素を期限切れにすることは可能ですか?


124

現在、キーと値のペア全体を期限切れにすることのみが可能ですか?リストタイプの構造に値を追加し、挿入後1時間で値を自動的に削除する場合はどうすればよいですか。それは現在可能ですか、それとも手動でパージを行うためにcronジョブを実行する必要がありますか?

回答:


76

現在、キーと値のペア全体を期限切れにすることのみが可能ですか?

私の知る限り、また有効期限に関するキーコマンドとドキュメントによると、現在、有効期限は特定のキーにのみ設定でき、その基本的なデータ構造には設定できません。ただし、この機能に関するGoogleグループでの議論には、代替ソリューションの概要が記載されています。


1
2016年7月現在、彼らはこれを新しいバージョンでサポートしていますか?
Kamran Shahid

1
@KamranShahidはこれで何かを得ましたか?
Prakash Kumar 2016

1
Nop Prakashはまだです。
Kamran Shahid 2016

3
この回答は8年後も関連がありますか?
simo

2
はい、ネストされたデータ構造の要素の有効期限はRedisではサポートされていません。
Itamar Haber

94

この問題を非常にうまく解決する一般的なパターンがあります。

ソートされたセットを使用し、タイムスタンプをスコアとして使用します。スコアの範囲で項目を削除するのは簡単です。定期的に、またはすべての書き込みでのみ実行できます。読み取りでは、範囲のスコアのみを読み取ることにより、常に範囲外の要素を無視します。

詳細:https : //groups.google.com/forum/#!topic / redis-db / rXXMCLNkNSs


7
素晴らしい解決策ですが、redisがこれを適切にサポートすることを望みます。これは一般的な要件であり、複雑な回避策は必要ありません。
UpTheCreek 2015

14
私は知らない、彼らが彼らの銃に固執することは本当にうれしい-彼らが望まないか計画しない方法で機能セットを拡張することはデザインを犠牲にすることを意味する。トップに追加の機能を構築することは完璧な解決策のように聞こえ、Redisにその機能を上手く任せています
Kieren Johnstone

redisはそのまま完璧です-シンプルでクリーンなデザインと予測可能な動作により、優れた
パフォーマンスを実現します

1
すばらしい解決策として、リストを保持し、最初の5つの要素を取得するだけの単純なfifoリストを使用することもできました。スケーラビリティに応じてリストが5 + Nを超えたら、キーを削除して最初からやり直します。シンプルで簡単、正確にRedisアルゴリズムがどうあるべきか。このアルゴリズムにより、レポートシステムにリストをクエリして、ユーザーがログインしているデバイスを確認するための十分な時間が与えられます。@KierenJohnstoneに同意し、Redisはその周りにアーキテクチャを作成するように設計されており、それがどのように完璧であるかを示しています。
リゲマー2017

1

私はこれを処理する別の方法に遭遇しました、それがあなたの誰かに役立つかどうかわかりませんが、ここに行きます:

ハッシュとソートされたセットは、GUIDによってリンクされます。

  1. 「x」秒で期限切れになるように設定されたハッシュがあります
  2. 範囲指定されたクエリに使用されるソートされたセットがあります
  3. 両方のデータがトランザクションに追加されるため、一方が失敗すると、両方が失敗します。
  4. 範囲指定されたクエリで、「EXISTS」を使用して、結果が反復されるときにハッシュ値が存在するかどうかを確認します
  5. 存在しない場合は有効期限が切れているため、ソートされたセットからアイテムを削除します
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.