【发布时间】:2016-07-18 11:18:10
【问题描述】:
在我的 rails 4 应用程序中,我尝试使用缓存,但由于缓存键设置、缓存帮助程序和自动过期的不同版本,我有点困惑。
所以让我通过几个例子来问这个问题。我不是故意将示例移到不同的问题上,因为我觉得这样任何人都可以一眼就理解其中的细微差别。
1:侧边栏的最新用户
我想显示最新的用户。这对于应用程序中的所有用户当然是相同的,并显示在所有页面上。在 railscasts 我看到了一个类似的例子,它通过在控制器中调用 expire_fragment... 而过期。但根据其他资源,这应该会在发生变化时自动过期(例如新用户注册)。所以我的问题是:我是否正确设置了密钥,它会自动过期吗?
_sidebar.html.erb(显示在侧边栏的所有页面上)
<% cache 'latest-users' %>
<%= render 'users/user_sidebar' %>
<% end %>
_users_sidebar.html.erb
<% @profiles_sidebar.each do |profile| %>
<%= profile.full_name %>
........
<% end %>
2:产品展示页面
我想展示给定的产品(仅在展示页面上)。这对所有用户来说都是一样的,但是因为有更多的产品,所以有更多的版本。问题又是一样的:我是否正确设置了密钥,它会自动过期吗?
产品/show.html.erb
<% cache @product %>
<%= @product.name.upcase %>
<%= @product.user.full_name %>
<% end %>
3:产品/索引(使用 will-paginate gem 分页)
在这里,我想一次缓存给定分页页面上的所有产品,因此产品会以块的形式缓存。这对所有用户也是一样的,并且只显示在products index page 上。 (稍后我想为此页面上的各个产品实施russian-doll-caching。)我的问题:我这样做对吗?它会自动过期吗?
产品 index.html.erb
<% cache [@products, params[:page]] %>
<%= render @products %>
<% end %>
_product.html.erb
<%= product.name %>
<%= product.user.full_name %>
.....
我尝试使用的示例代码(不确定是否好用):
第一个有索引页,没有俄罗斯娃娃。
第二个是俄罗斯娃娃与cmets的展示页面。
【问题讨论】:
-
感谢 abookyun!我以前读过这篇文章,但不太喜欢这篇文章,因为它使用的是 rails3 语法,在这种语法中你必须使用“v1”、“v5”等。如果你是这个主题的新手,这有点令人困惑。我会查看 api 文档。
标签: ruby-on-rails caching memcached fragment-caching russian-doll-caching