部分缓存过期

时间:2015-06-16 06:40:51

标签: ruby-on-rails caching memcached

在我的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本未更改的书籍的整个缓存到期?或者只是全部或全部?

2 个答案:

答案 0 :(得分:1)

不再需要手动使您的缓存过期--Rails现在会自动实现基于密钥的过期。因此,您可以轻松地为每本书创建一个唯一的缓存,如下所示:

recover()

这应该会自动为您创建和过期每个缓存。不需要任何类型的清扫方法。

答案 1 :(得分:0)

来自 指南

&#xA; &#XA;
&#XA;

您还可以使用Active Record模型作为缓存键:

&#xA;
&#xA;&#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)方法

&#xA; &#xA;
  def after_update(book)&#xA; expire_fragment“book”&#xA; end&#xA;  
&#xA;&#xA;

不确定,只是给出一个主意。

&#xA;