Rails 3.1通配符使用查询字符串过期缓存

时间:2011-09-20 00:20:05

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

我有一个页面,其中index操作显示帖子列表,自定义排序列,分页等。虽然我可以使用

缓存每个页面/排序选项
cache(:direction => params[:direction], :sort => params[:sort], :page => params[:page]) do

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

如何通过一次调用expire_action来使操作的所有缓存成员到期?如果无法做到这一点,您可以推荐其他任何缓存选项吗?

1 个答案:

答案 0 :(得分: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=的详细信息可能会有所不同,具体取决于您在应用程序中处理其他数据的方式。可能还有比这更优雅的解决方案,但这是我想到的。