3

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

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

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

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

4

1 回答 1

1

我建议您阅读这篇关于在 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_version可能cache_version=会有所不同,具体取决于您在应用程序中处理其他数据的方式。可能还有比这更优雅的解决方案,但这就是我想到的。

于 2012-11-18T05:23:39.090 回答