【问题标题】:Rails 3.1 wildcard expire cache for action with query stringRails 3.1 通配符过期缓存用于查询字符串的操作
【发布时间】:2011-11-20 16:23:47
【问题描述】:

我有一个页面,其中index 操作显示帖子列表,具有自定义排序列、分页等。虽然我可以缓存每个单独的页面/排序选项

cache(:direction => params[:direction], :sort => params[:sort], :page => params[:page]) do

我不能通过一次调用expire_action 来一次性使所有这些过期(这是一个问题)。我知道expire_action 有一个正则表达式选项,但这很麻烦(使用正则表达式搜索用哈希创建的键),而且我使用的是 memcached,它不起作用。

如何通过一次调用expire_action 使操作的所有缓存成员失效?如果这不可能,您是否可以推荐任何其他缓存选项?

【问题讨论】:

  • 这和 Sweepers 没有任何关系。无论缓存键的其余部分如何,我想知道如何使属于某个操作的所有缓存过期。

标签: ruby-on-rails ruby-on-rails-3 caching fragment-caching


【解决方案1】:

我建议您查看this post on caching in Rails,这是一篇非常详尽的帖子,其中介绍了各种策略,可能会提供您在这种情况下寻找的结果。

虽然他在帖子中没有提及,但在参数列表中添加某种缓存破坏参数(如缓存版本 ID)可能会为您提供一种以更通用的方式使缓存失效的方法。例如:

cache(:version => Posts.cache_version, :direction => params[:direction], :sort => params[:sort], :page => params[:page]) do

# Later on to bust the cache
Posts.cache_version = 2

您希望如何实现cache_versioncache_version= 的详细信息可能会有所不同,具体取决于您在应用程序中处理其他数据的方式。可能还有比这更优雅的解决方案,但这就是我想到的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多