我有一个页面,index
操作在其中显示帖子列表,以及自定义排序列,分页等。尽管我可以使用
cache(:direction => params[:direction], :sort => params[:sort], :page => params[:page]) do
我无法通过一次调用
expire_action
一次使所有这些过期(这是一个问题)。我知道expire_action
有一个正则表达式选项,但这很麻烦(使用正则表达式来搜索使用哈希创建的键),并且我正在使用无法使用的memcached。如何通过单次调用
expire_action
终止操作的所有缓存成员?如果这不可能,那么您是否可以建议其他缓存选项?
最佳答案
我建议您浏览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_version
和cache_version=
的详细信息可能会有所不同,具体取决于您如何处理应用程序中的其他数据。也许还有比这更优雅的解决方案,但这就是我想到的。
关于ruby-on-rails - Rails 3.1通配符使缓存与查询字符串一起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7478788/