我运行了mysql代理,它接受查询,对其执行md5,并将结果缓存到memcached DB中。当rails应用程序中发生更新会使该缓存无效时,会发生此问题。关于如何在当时缓存缓存中所有正确密钥的任何想法?
答案 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,这实际上会使您的数据失效。
逻辑上很乱,但你可以在一些不好的查询中使用它。
-
最后,您可以将这些查询存储在不同的内存缓存服务器中并更频繁地刷新。