但是一般语法

#一般用法,cache后面跟cache名称和代码块(代码块中是需要cache的名称),expires_in是可选参数
<% cache "name", expires_in: 2.seconds do %>
  <%= render 'user' %>
<% end %>

片段缓存

#缓存单个商品
<% @users.each do |user| %>
  <% cache user do %>
    <%= render partial: 'user', locals:{user: user} %>
  <% end %>
<% end %>

#缓存整个产品列表方式1
<% cache @users do %>
  <% @users.each do |user| %>
    <%= render partial: 'user', locals:{user: user} %>
  <% end %>
<% end %>

#缓存整个产品列表方式2
<%= render partial: 'user', collection: @users, cached: true %>

sql缓存(实际操作无效果)

#代码示例,如果执行相同的查询,会执行下面的语句
class ProductsController < ApplicationController
  def index
    # 运行查找查询
    @products = Product.all
    ...
    # 再次运行相同的查询
    @products = Product.all
  end
end

russian doll

#出现的原因为:当指定的对象更新时,updated_at值改变,缓存失效,但是关联对象的updated_at值未改变,缓存存在
#上面的问题就是russian doll,为了解决这个问题,通过下面的这种方式

class Product < ApplicationRecord
  has_many :games
end

class Game < ApplicationRecord
  belongs_to :product, touch: true #主要就是使用touch: true这个属性
end

results matching ""

    No results matching ""