web-dev-qa-db-ja.com

キー期限切れのイベント

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

23
martoskin

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

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

受け取ることができるイベントの例は次のとおりです。

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

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

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

20

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

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

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

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

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

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

9
user3678130

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

1
Mosayeb