このために特定の名前空間を定義する必要はありません。 Redisでは、EXPIREコマンドを使用してキーごとにタイムアウトをキーごとに設定できます。キーの有効期限に関する一般的なポリシーを設定ファイルで定義されて
:あなたの目的のために
# MAXMEMORY POLICY: how Redis will select what to remove when maxmemory
# is reached? You can select among five behavior:
#
# volatile-lru -> remove the key with an expire set using an LRU algorithm
# allkeys-lru -> remove any key accordingly to the LRU algorithm
# volatile-random -> remove a random key with an expire set
# allkeys->random -> remove a random key, any key
# volatile-ttl -> remove the key with the nearest expire time (minor TTL)
# noeviction -> don't expire at all, just return an error on write operations
#
、揮発性-LRUポリシーを設定する必要があります。
揮発性にしたいキーでEXPIREを呼び出すだけで、Redisにそれらをエビクトさせる必要があります。ただし、タイムアウトが発生すると、最も古いキーが最初に削除されることを保証することは困難です。詳細な説明here。
ただし、特定の使用例については、キーの有効期限は使用しませんが、キャップ付きのコレクションをシミュレートしようとします。指定されたユーザーのアクティビティフィードがオブジェクトのリストとして表されている場合、アクティビティオブジェクトをLPUSHするのは簡単で、LTRIMを使用してリストのサイズを制限します。 FIFOの振る舞いを得て、メモリ消費を無制限に抑えます。
UPDATE:二つの異なるデータベースを使用して
:今
あなたが本当にデータを分離する必要がある場合、あなたはRedisを持つ2つの主要な可能性を持っています。 Redisデータベースは整数で識別され、インスタンスごとに複数のデータベースを持つことができます。データベース間を切り替えるにはselect commandを使用します。データベースを使用してデータを分離することはできますが、異なるプロパティを割り当てることはできません(たとえば、期限切れポリシーなど)。
2つの異なるインスタンスを使用します。空のRedisインスタンスは非常に軽いプロセスです。だから、いくつか問題なく起動することができます。実際には、Redisを使用してデータを分離するための最良かつ拡張性のある方法です。各インスタンスは、独自のポリシー(排除ポリシーを含む)を持つことができます。クライアントはインスタンスと同じ数の接続を開く必要があります。
また、エビクションポリシー要件を実装するためにデータを分離する必要はありません。
ありがとうございましたが、タグ付けに使用されるキーとアクティビティフィードに使用されるキーを分けることができます。これらの鍵が期限切れポリシーによって期限切れにならないようにする方法はありますか?どのように関連していない2つの別々のデータセットを扱う場合、Redisをどのように使用しますか? – Sid
それは私の主張でした:あなたはそれらを分ける必要はありません。期限切れになるコマンドに対してEXPIREコマンドを使用するだけです。実際にデータを分離したい場合、2つのオプションがあります。異なるデータベースまたは異なるインスタンスです。私は自分の答えを更新する。 –