【发布时间】:2010-10-08 13:53:05
【问题描述】:
我正在运行 mysql 代理,它接受查询,对其执行 md5,并将结果缓存到 memcached 数据库中。当 Rails 应用程序中发生会使缓存失效的更新时,就会出现问题。关于当时如何使缓存中的所有正确键无效的任何想法?
【问题讨论】:
标签: mysql ruby-on-rails memcached mysql-proxy
我正在运行 mysql 代理,它接受查询,对其执行 md5,并将结果缓存到 memcached 数据库中。当 Rails 应用程序中发生会使缓存失效的更新时,就会出现问题。关于当时如何使缓存中的所有正确键无效的任何想法?
【问题讨论】:
标签: mysql ruby-on-rails memcached mysql-proxy
问题的核心,是md5生成的,不知道key是什么。
但是,您可以通过不存储该查询的数据来缓解该问题。
您的查询可能类似于“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,这实际上会使您的数据过期。
逻辑混乱,但您可以在一些错误的查询上使用它。
--
最后,您可以将这些查询存储在不同的内存缓存服务器中并更频繁地刷新。
【讨论】: