sql >> データベース >  >> NoSQL >> Redis

redisストリームのTTLを定義する方法は?

    TTL/年齢に基づいて古いエントリを削除する簡単な方法はありません。 XTRIM/XDELを組み合わせて使用​​できます ストリームをトリミングする他のコマンドを使用します。

    XTRIMの使い方を見てみましょう

    XTRIMストリームMAXLEN〜SIZE

    XTRIMは、ストリームを指定された数のアイテムにトリミングし、必要に応じて古いアイテム(IDの低いアイテム)を削除します。

    削除ポリシーに基づいて毎日または定期的にストリームサイズを生成し、XLENを使用してどこかに保存します コマンド

    XTRIMを次のように呼び出す定期的なジョブを実行します

    XTRIM x-stream MAXLEN ~ (NEW_SIZE - PREVIOUS_SIZE)

    たとえば、昨日のストリームサイズは500でしたが、現在は600になっているので、500エントリを削除して、実行できるようにする必要があります

    XTRIM x-stream MAXLEN ~ 100

    削除には、毎日、毎週、週に2回など、さまざまなポリシーを使用できます。

    XDELストリームID[ID...]

    指定されたエントリをストリームから削除し、削除されたエントリの数を返します。これは、特定のIDが存在しない場合にコマンドに渡されるIDの数とは異なる場合があります。

    したがって、サービスBがイベントを消費するときはいつでも、サービスBがストリームIDを知っているため、サービス自体がストリームエントリを削除できますが、コンシューマグループの使用を開始するとすぐには機能しません。したがって、RedisセットまたはRedisマップを使用して確認応答ストリームIDを追跡し、定期的なスイープジョブを実行してストリームをクリーンアップすると言います。

    サービスAはID1のストリームアイテムをサービスBに送信します。サービスBは、mapack_stream ={ID1:true}のアイテムを消費した後、ストリームアイテムを確認します。たとえば、他のデータを追跡できます。消費者グループの場合はカウントします。

    スイープジョブは、毎日午前1時のように定期的に実行され、ack_streamのすべての要素を読み取り、削除が必要なすべてのアイテムを除外します。これで、XDELを呼び出すことができます ストリームIDのセットを使用したバッチコマンド。




    1. MongoDBMap-reduceマップ関数で変数を使用する方法

    2. 複数のフィールドでの並べ替えmongoDB

    3. $matchが見つからない場合の$addFields

    4. $pullと$[identifier]を使用してネストされた配列からオブジェクトを削除します(mongoDB 3.6)