我正在尝试根据用户个人资料的浏览次数在我的主页上列出用户。用户是分页的,我试图缓存用户并在配置文件获得新视图时使缓存无效。
我的控制器代码:
def index
@users = Rails.cache.read(params[:page])
if !@users.nil?
flash[:info] = "Cache was hit."
else
flash[:info] = "Miss."
@users = User.paginate(page: params[:page], per_page: 5, order: "views DESC")
Rails.cache.write(params[:page], @users)
end
end
当我第一次转到第 2 页时,我按预期得到缓存未命中,当我刷新时,我也按预期得到缓存命中。但是,当我通过控制台手动更改用户views
并刷新页面 2 时,我在控制台中所做的更改影响了页面,即使该页面应该是从缓存中呈现的。顶部的通知仍然显示“缓存被命中”。
在控制台中运行Rails.cache.read("2")
以提取我的控制器缓存的内容给了我这个:
User Load (0.4ms) SELECT "users".* FROM "users" ORDER BY views DESC LIMIT 5 OFFSET 0
(0.2ms) SELECT COUNT(*) FROM "users"
=> users freshly pulled from the database
通过控制台手动缓存值在调用User.paginate
时未显示查询:Rails.cache.read
test = User.paginate(page: 1, order: "views DESC")
=> users freshly pulled from the database
Rails.cache.write("9", test)
=> true
Rails.cache.read("9")
=> users from test; no queries displayed above this
我不确定为什么我的控制器代码正在缓存查询而不是结果。任何建议将不胜感激。