Rails是否具有用于使缓存过期的标签?
|
我们的应用在控制器中使用“ 0”来缓存视图范围之外的某些项目(例如元标记),然后在视图的大部分内容上使用fragment_caching。
该视图缓存了一个主要模型,但是我们在该主要缓存中使用了来自其他5个模型(未通过关联连接)的数据。在主模型上使用清扫器很容易使片段过期,但是那些其他模型也发生了变化,需要触发此页面才能过期。
我们不能使用正则表达式路由来删除缓存键,因为我们只能通过主模型来引用此缓存条目,而其他模型则由我们在控制器的缓存块内执行的昂贵查询所确定。
Rails 3是否有一种从本质上使用标签来标记缓存条目的方法,因此当页面上的6个模型中的任何一个发生更改时,我们都可以将其废弃,但是我们仍然只能从主模型的键中找到缓存条目?
这是一些表达想法的伪代码:
在控制器中
@cache_key = \"/page/#{params[:name]}/#{params[:id]}\"
unless fragment_exist? ( { :slug => @cache_key })
# run our processes here that will be needed in the view,
# then cache the data that is used outside the view
Rails.cache.write(@cache_key, { (data goes here) } )
# run our expensive query here:
@similar_pages = Page.pricey_query!.limit(5).all
else
cached = Rails.cache.read(@cache_key)
end
在视图中
- cache( {:slug => @cache_key} ) do
- @similar_pages.each do |page|
= image_tag page.photos.first.image.url
-# more pretty stuff here
我的目标:
我:\“哦,@ cache_key页面已更改,让它过期!\”
滑轨:Okay, easy!
我:“类似的页面之一更改了第一张照片,我该怎么办?”
滑轨:Umm... #(*$^*@ .. does ... not ... compute.
没有找到相关结果
已邀请:
3 个回复
马口
从技术上讲,我可以在
上建立自引用的
关系,但是我决定不这么做,因为我不需要那样引用。我刚刚创建了一个简单的
模型:
然后使用
(因为我很懒,并且因为我想在一个INSERT语句中执行此操作),所以我在缓存块中执行了此操作:
在观察者的
方法中,我这样做:
森含械
缕嚏冻
https://github.com/twinturbo/cashier