缓存查询后的rails4仍然运行

时间:2016-03-31 11:41:10

标签: ruby-on-rails caching fragment-caching

我有一个rails 4 app并试图实现缓存。我使用@profiles_sidebar.first缓存键来检查是否创建了新用户。我不确定这是否正常,因为仍然存在数据库查询。这是检查缓存是否需要过期的首选机制吗?我做得好吗?

<% cache(@profiles_sidebar.first) do %>
  <% @profiles_sidebar.each do |profile| %>
    <%= link_to user_path(profile.user) do %>            
      <%= truncate(profile.full_name, length: 25) %>
      <%= truncate(profile.company, length:25) %>
    <% end %>
  <% end %>
<% end %>
读取缓存时

控制台代码:

13:31:53 puma.1    |   Profile Load (2.2ms)  SELECT  "profiles".* FROM "profiles"  ORDER BY "profiles"."created_at" DESC LIMIT 1
13:31:53 puma.1    |   User Load (2.2ms)  SELECT "users".* FROM "users" WHERE "users"."id" IN (67)
13:31:53 puma.1    |   Cache digest for app/views/users/_user_sidebar.html.erb: bfc9447057c94bcfe13c18e391127f2d
13:31:53 puma.1    | Read fragment views/profiles/62-20160331112332689423000/bfc9447057c94bcfe13c18e391127f2d (0.2ms)
13:31:53 puma.1    |   Rendered users/_user_sidebar.html.erb (11.8ms)

2 个答案:

答案 0 :(得分:1)

由于您需要知道自创建摘要以来记录是否已更新,因此无法绕过至少一个数据库查询。

你可以预先加载document.getElementById("test").classList.remove("active"); 侧栏,这对于&#34;寒冷&#34;自单个数据库查询以来缓存:

@profiles_sidebar

获取单个记录与10之间的实际差异可能是微不足道的。

您还可以使用eager loading or includes在一个查询中同时获取用户和个人资料:

@profiles_sidebar = Profile.order(created_at: :desc)
                           .limit(10)
                           .load

答案 1 :(得分:0)

我想你是在开发环境中,你确定你已经在rails中激活了缓存吗? (默认情况下,它对dev env禁用)

确保您在development.rb中有这一行

config.action_controller.perform_caching = true