ruby-on-rails – 缓存特定的部分轨道3.0.x.

我有一个主页,其中有一些部分在页面上呈现.它也有会话标题(登录).
部分包含分页的书籍集.现在我想缓存这个部分,因为它在一周内更新一次.

>问题1:如何缓存特定的部分(不打击
D b) ?
>问题2:更新时如何删除(过期)缓存内容
书籍模型?

解决方法

在这里寻找 fragment caching,它发生在视图层.片段缓存和存储内容的到期非常容易.你有一本书的清单,所以我们说你的观点看起来像这样:
<ul>
  <% @books.each do |book| %>
    <li><%= book.name %></li>
  <% end %>
</ul>

要为此位启用缓存,只需将其包装在缓存中:

<% cache do %>
  <ul>
    <% @books.each do |book| %>
      <li><%= book.name %></li>
    <% end %>
  </ul>
<% end %>

当然,这并没有命名缓存或做任何特别的事情……虽然Rails会自动选择这个缓存片段的唯一名称,但它不会真正有用.我们可以做得更好.让我们使用DHH的key-based cache expiration技术,并为缓存提供与其内容相关的名称.

<% cache ['book-list',*@books] do %>
  <ul>
    <% @books.each do |book| %>
      <li><%= book.name %></li>
    <% end %>
  </ul>
<% end %>

将参数传递到缓存中会根据提供的参数构建缓存键.字符串直接传入 – 因此,在这里,缓存将始终以“book-list”开头.这是为了防止缓存与其他可能缓存相同内容但具有不同视图的位置发生冲突.对于@books数组的每个成员,Rails将调用cache_key:对于ActiveRecord对象,这将产生一个由其模型ID组成的字符串,而且最重要的是,最后一次更新对象.

这意味着当您更新对象时,此片段的缓存键将更改.换句话说,它会自动过期 – 当书籍更新时,此缓存语句将搜索不存在的键,认为它不存在,并用新内容填充它.旧的,陈旧的内容将在您的缓存存储中停留,直到被内存或年龄限制驱逐(memcached会自动执行此操作).

我在许多生产应用程序中使用此技术,它的工作非常好.有关更多信息,请查看37signals post,有关Rails中的常规缓存信息,请参阅Ruby on Rails caching guide.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...