我正在运行 mysql 代理,它接受查询,对其执行 md5,并将结果缓存到 memcached 数据库中。当 Rails 应用程序中发生会使缓存失效的更新时,就会出现问题。关于当时如何使缓存中的所有正确键无效的任何想法?
问问题
408 次
1 回答
0
问题的核心是你不知道密钥是什么,因为它是 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,这实际上会使您的数据过期。
逻辑上混乱,但你可以在一些错误的查询上使用它。
--
最后,您可以将这些查询存储在不同的内存缓存服务器中并更频繁地刷新。
于 2010-10-08T15:14:54.693 回答