但是一般语法
#一般用法,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