我正试图根据用户个人资料的浏览量在我的主页上列出用户。用户被分页,我试图缓存用户,并在配置文件获得新视图时使缓存无效。
我的控制器代码:
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
我不确定为什么我的控制器代码缓存查询而不是结果。如有任何建议,我们将不胜感激。