クエリを取得してmd5を実行し、結果をmemcachedDBにキャッシュするmysqlプロキシを実行しています。この問題は、そのキャッシュを無効にする更新がRailsアプリで発生したときに発生します。その時点でキャッシュ内のすべての適切なキーを無効にする方法についてのアイデアはありますか?
1 に答える
問題の核心は、キーが md5 で生成されているため、キーが何であるかがわからないことです。
ただし、そのクエリのデータを保存しないことで問題を軽減できます。
クエリは、「SELECT my_data.* FROM my_data WHERE 条件」のようになります。
ただし、代わりにこのクエリを使用することで、データの冗長性を減らすことができます
SELECT my_data.id FROM my_data WHERE 条件
その後、
Memcache.mget( ids )
これにより、条件に一致しなくなったデータの返却が禁止されることはありませんが、古いデータの返却が軽減される可能性があります。
--
別のオプションは、名前空間の使用を検討することです: ここを参照してください:
http://code.google.com/p/memcached/wiki/NewProgrammingTricks#Namespacing
すべての主要なクエリの名前を付けることができます。キーを削除することはできませんが、キーのバージョン ID を変更することはできます。これにより、事実上、データが期限切れになります。
論理的に面倒ですが、いくつかの悪いクエリで使用できます。
--
最後に、これらのクエリを別の memcache サーバーに保存し、より頻繁にフラッシュすることができます。