在我的Rails应用程序中,我使用这样的常规片段缓存:
- cache "books", skip_digest: true do
- @books.each do |book|
= book.title
= book.author
为了管理缓存过期,我使用扫地机:
class BookSweeper < ActionController::Caching::Sweeper
observe Book
def after_update(book)
expire_fragment "books"
end
end
假设我有100本书,1本书被删除或更改。然后书籍缓存将过期,第一个网站访问者将体验到较慢的页面,因为必须创建新的缓存。
有没有办法只更新那本书的缓存,而不是为99本未更改的书籍的整个缓存到期?或者只是全部或全部?
答案 0 :(得分:1)
不再需要手动使您的缓存过期--Rails现在会自动实现基于密钥的过期。因此,您可以轻松地为每本书创建一个唯一的缓存,如下所示:
recover()
这应该会自动为您创建和过期每个缓存。不需要任何类型的清扫方法。
答案 1 :(得分:0)
来自 指南
&#xA; &#XA;&#XA;&#xA;&#xA;您还可以使用Active Record模型作为缓存键:
&#xA;
&lt;%Product.all.each做| p | %GT;&#XA; &lt;%cache(p)do%&gt;&#xA; &lt;%= link_to p.name,product_url(p)%&gt;&#xA; &lt;%end%&gt;&#xA;&lt;%end%&gt;&#xA;
&#xA;&#xA; 在您的情况下尝试这种方法是这样的
&#xA;&#xA; - @ books.each do | book |&#xA; - 缓存“book”,skip_digest:true do&#xA; = book.title&#xA; = book.author&#xA;
&#xA;&#xA; 并像这样更改 after_update(book)
方法
def after_update(book)&#xA; expire_fragment“book”&#xA; end&#xA;
&#xA;&#xA; 不确定,只是给出一个主意。
&#xA;