タグに基づいてキーを無効化できる Redis キャッシュを実装したいと考えています。
たとえば、投稿リストのクエリをキャッシュするには、キャッシュは次の行のようになります。
{
"posts:name=lorem": [
{ id: 1, name: "Lorem ipsum dolor.." },
{ id: 2, name: "Lorem ipsum dolor.." },
],
"tags:post:1": ["posts:name=lorem"],
"tags:post:2": ["posts:name=lorem"]
}
で始まるエントリにtags
は、特定のエンティティが存在する一連のキャッシュ キーが含まれているため、特定の投稿のキャッシュを無効にするには、そのタグを取得しdel
、それらすべてに対してクエリを実行します。
私が苦労している部分は、立ち退きポリシーです。通常はallkeys-lru
が優先されますが、クエリがまだキャッシュされている間にタグがランダムに消えないようにする必要があります。これは、redis がを削除tags:post:1
すると、そのキャッシュを無効にすることができないためです。
を見て、データでは 3 時間、タグでは 4 時間にvolatile-ttl
設定したと思いました。そうttl
すれば、Redis はタグをより長く保持することを好むはずですが、そのlru
部分は機能しません。そして、これにはいくつかの隠れた問題があるように感じます。
これについてどうすればよいですか?タグを別のデータベースに保持することを考えましたが、エビクション ポリシーはデータベースごとではなく、インスタンスごとです。
代わりに、タグを別のインスタンスに保存する必要がありますか?