31

すべての期限切れのキーを取得できる機能がredisにあるのだろうか(つまり、すべての期限切れのレコードを取り戻す機会を与えるある種のイベントを意味します)。その目的は、古い値を別のデータベースに保存することです。パブリッシングメカニズムを使用してそれが可能であると聞きましたが、グーグルはこのアイデアで私たちを助けることができません。

4

3 に答える 3

26

redisの現在の開発バージョンには、キースペース通知という新機能が含まれています。ドキュメント: http: //redis.io/topics/notifications

キースペース通知を使用すると、クライアントは、何らかの方法でRedisデータセットに影響を与えるイベントを受信するために、Pub/Subチャネルにサブスクライブできます。

受信可能なイベントの例は次のとおりです。

  • 特定のキーに影響を与えるすべてのコマンド。
  • LPUSH操作を受信するすべてのキー。
  • データベース0で期限切れになるすべてのキー。

うまくいけば、それはすぐに安定するでしょう。

ところで、期限切れのキーの値を保存するのに役立つことはあまりありません。有効期限イベントが発生すると、値はすでに失われています。

于 2013-02-01T18:41:09.957 に答える
15

キースペース通知によって生成される組み込みの期限切れイベントは正確ではありません。http://redis.io/topics/notificationsの最後のセクションを参照してください

有効期間が関連付けられているキーは、Redisによって次の2つの方法で期限切れになります。

  1. キーがコマンドによってアクセスされ、有効期限が切れていることが判明した場合。

  2. アクセスされないキーも収集できるようにするために、バックグラウンドで期限切れのキーを段階的に検索するバックグラウンドシステムを介して。

期限切れのイベントは、キーがアクセスされ、上記のシステムのいずれかによって期限切れになっていることが判明したときに生成されます。その結果、Redisサーバーがキーの存続時間に期限切れのイベントを生成できるという保証はありません。ゼロの値に達します。キーを常に対象とするコマンドがなく、TTLが関連付けられているキーが多数ある場合、キーの存続時間がゼロに低下してから期限切れイベントが生成されるまでに大幅な遅延が発生する可能性があります。

発生期限イベントを完全に実装するには、自分で実装する必要がある場合があります。たとえば、有効期限でソートされたソート済みリスト(またはAVLツリー)を使用し、リストの末尾を継続的に読み取る(キューから外す)。リーダーが有効期限に達していないことに気付いた場合、リーダーはスリープします(有効期限-今)。このようにして、精度を10秒以内に制御できます。

于 2014-05-27T02:41:00.737 に答える
2

を使用しredis-schedulerます。あなたはここ
でそれを見つけることができます

于 2015-02-27T14:29:21.860 に答える