发生更新时使用mysql代理使memcached失效?

时间:2010-10-08 13:53:06

标签: mysql ruby-on-rails memcached mysql-proxy

我运行了mysql代理,它接受查询,对其执行md5,并将结果缓存到memcached DB中。当rails应用程序中发生更新会使该缓存无效时,会发生此问题。关于如何在当时缓存缓存中所有正确密钥的任何想法?

1 个答案:

答案 0 :(得分:0)

问题的核心是,你不知道密钥是什么,因为它是md5生成的。

但是,您可以通过不存储该查询的数据来缓解此问题。

您的查询可能如下所示“SELECT my_data。* FROM my_data WHERE conditions”

但是,您可以使用此查询来减少数据的减少量

SELECT my_data.id FROM my_data WHERE conditions

然后由

跟进

Memcache.mget(ids)

这不会禁止返回不再符合条件的数据,但可能会减少返回的陈旧数据。

-

另一个选择是研究使用命名空间:见这里:

http://code.google.com/p/memcached/wiki/NewProgrammingTricks#Namespacing

您可以命名所有主要查询。您将无法删除密钥,但您可以更改密钥版本ID,这实际上会使您的数据失效。

逻辑上很乱,但你可以在一些不好的查询中使用它。

-

最后,您可以将这些查询存储在不同的内存缓存服务器中并更频繁地刷新。