gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 07:03:33 26 4
gpt4 key购买 nike

我有一个主页,整个页面都呈现了一些部分。它也有 session header (登录)。部分包含已分页的书籍集。现在我想缓存这个部分,因为它每周更新一次。

  • 问题 1:如何缓存特定的部分(不命中分贝)?
  • 问题 2:更新时如何删除(过期)缓存内容那个书本模型?

最佳答案

您正在寻找 fragment caching这里,发生在 View 层。片段缓存和存储内容的过期非常容易做到。您有一个图书 list ,假设您的 View 看起来有点像这样:

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

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

<% 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”开头。这是为了防止与您可能​​缓存相同内容但具有不同 View 的其他地方发生缓存冲突。对于 @books 数组的每个成员,Rails 将调用 cache_key:对于 ActiveRecord 对象,这会产生一个由其模型、ID 以及最重要的对象最后一次更新时间组成的字符串。

这意味着当你更新对象时,这个片段的缓存键会改变。换句话说,它会自动过期——当一本书更新时,这个缓存语句将搜索一个不存在的键,断定它不存在,并用新内容填充它。旧的、陈旧的内容将在您的缓存存储中徘徊,直到被内存或年龄限制驱逐(memcached 自动执行此操作)。

我在许多生产应用程序中使用了这种技术,效果非常好。有关更多信息,请查看 37signals post ,以及有关 Rails 中的一般缓存信息,请参阅 Ruby on Rails caching guide .

关于ruby-on-rails - 缓存特定的部分 rails 3.0.x,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13688968/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com