缓存查询后的 rails4 仍然运行
rails4 after caching query still runs
我有一个 rails 4 应用程序并试图实现缓存。我使用 @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)
无法绕过至少一个数据库查询,因为您需要知道自摘要创建以来记录是否已更新。
您可以预先加载 @profiles_sidebar
侧边栏,这在 "cold" 缓存上会更好一些,因为它是单个数据库查询:
@profiles_sidebar = Profile.order(created_at: :desc)
.limit(10)
.load
获取单个记录和获取 10 个记录之间的实际差异可能很小。
您可能还想使用 eager loading or includes 在一个查询中获取用户和配置文件:
@profiles_sidebar = Profile.includes(:user)
.order(created_at: :desc)
.limit(10)
.load
我猜你是在开发环境,你确定你在rails中激活了缓存?? (默认情况下它对开发环境是禁用的)
确保你的 development.rb
中有这一行
config.action_controller.perform_caching = true
我有一个 rails 4 应用程序并试图实现缓存。我使用 @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)
无法绕过至少一个数据库查询,因为您需要知道自摘要创建以来记录是否已更新。
您可以预先加载 @profiles_sidebar
侧边栏,这在 "cold" 缓存上会更好一些,因为它是单个数据库查询:
@profiles_sidebar = Profile.order(created_at: :desc)
.limit(10)
.load
获取单个记录和获取 10 个记录之间的实际差异可能很小。
您可能还想使用 eager loading or includes 在一个查询中获取用户和配置文件:
@profiles_sidebar = Profile.includes(:user)
.order(created_at: :desc)
.limit(10)
.load
我猜你是在开发环境,你确定你在rails中激活了缓存?? (默认情况下它对开发环境是禁用的)
确保你的 development.rb
中有这一行config.action_controller.perform_caching = true