0

我正在运行 mysql 代理,它接受查询,对其执行 md5,并将结果缓存到 memcached 数据库中。当 Rails 应用程序中发生会使缓存失效的更新时,就会出现问题。关于当时如何使缓存中的所有正确键无效的任何想法?

4

1 回答 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 回答