【问题标题】:Expiring memcached using mysql proxy when an update occurs?发生更新时使用 mysql 代理使 memcached 过期?
【发布时间】:2010-10-08 13:53:05
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    问题的核心,是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,这实际上会使您的数据过期。

    逻辑混乱,但您可以在一些错误的查询上使用它。

    --

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

    【讨论】:

    • 我认为 Memcahed 命名空间是在这种情况下要走的路,因为对 MYsql 进行一些额外调用以检索最新密钥比在生产中运行 20 秒 mysql 查询要好。
    猜你喜欢
    • 2013-08-07
    • 1970-01-01
    • 2013-04-14
    • 2010-11-01
    • 2011-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多