1
我試圖根據他們的配置文件有多少個視圖在我的主頁上列出用戶。用戶分頁,並且我試圖緩存用戶並在配置文件獲取新視圖時使該緩存失效。Rails保持緩存查詢而不是查詢的結果
我的控制器代碼:
def index
@users = Rails.cache.read(params[:page])
if [email protected]?
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頁時,我在控制檯中所做的更改影響了頁面,即使該頁面應該從緩存中呈現。頂部的通知仍然表示「Cache被擊中」。
在控制檯中運行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
我不知道爲什麼我的控制器代碼緩存查詢而不是結果。任何建議將不勝感激。
謝謝!使用'.all'解決了這個問題。不知道ActiveRecord是懶惰的。 – user1650177