【问题标题】:Varying memcached action caching by domain按域改变 memcached 动作缓存
【发布时间】:2012-10-01 16:01:13
【问题描述】:

我使用 Memcached(实际上是 Heroku 上的 Memcachier)在 Rails 3 应用程序中进行动作缓存,如下所示:

caches_action :index, :expires_in => 14.days

问题是我的应用程序是从许多不同的域访问的,并且内容需要有所不同。目前,所有域的缓存都相同。我如何做到这一点?

【问题讨论】:

    标签: ruby-on-rails caching memcached


    【解决方案1】:

    Rails caches_action 文档说:

    动作缓存在内部使用片段缓存和环绕过滤器 做这项工作。分片缓存根据主机和 请求的路径。访问的页面 http://david.example.com/lists/show/1 将产生一个名为 david.example.com/lists/show/1。这允许缓存器 区分 david.example.com/lists/ 和 jamis.example.com/lists/ - 这是帮助 子域作为帐户密钥模式。

    所以生成的密钥对于不同的域应该是不同的。

    为了检查它,我什至使用 :mem_cache_store 创建了一个应用程序,并以详细模式 (-vv) 启动了一个 memcached 服务器。

    http://localhost:3000/ 的请求/响应如下所示:

    <21 get views/localhost:3000/index
    >21 END
    <21 set views/localhost:3000/index 0 0 7123
    >21 STORED
    

    使用不同的域http://foobar:3000/

    <21 get views/foobar:3000/index
    >21 END
    <21 set views/foobar:3000/index 0 0 7123
    >21 STORED
    

    更新

    如果你想根据请求创建不同的缓存键,而默认的不够用,那么你可以使用caches_action:cache_path选项。

    您可以在this SO question 中找到示例。

    【讨论】:

    • 我认为 OP 正在考虑为不同的人提供不同的内容,具体取决于他们的位置(地理位置或其他)。
    猜你喜欢
    • 2010-11-22
    • 1970-01-01
    • 1970-01-01
    • 2014-01-21
    • 2010-10-11
    • 1970-01-01
    • 1970-01-01
    • 2011-03-06
    • 2012-08-30
    相关资源
    最近更新 更多