[英]Rails.cache - working but not working
我正在使用Rails.cache(我已嘗試使用dalli gem的默認存儲和memcached - 但我得到相同的行為)它似乎正在工作,但不是(日志顯示查詢未生成,但實際結果另外顯示)...我有一個搜索頁面緩存前十個查詢1天:
search.rb
def self.top_ten
Rails.cache.fetch("top_ten_searches_cache", :expires_in => 1.day) do
Search.order("count DESC").limit(10)
end
end
但是,當我進入搜索頁面並重復輸入新的搜索詞時,它開始顯示在前十個結果中! (雖然我不希望十大結果在1天過去之前發生變化。)當緩存存儲是默認的時候,日志中沒有顯示任何查詢(所以你認為緩存正在工作),當使用dalli / memcached時,我得到了完全一樣的結果行為,但在日志中有這個:
Cache read: top_ten_searches_cache ({:expires_in=>1 day})
Cache fetch_hit: top_ten_searches_cache ({:expires_in=>1 day})
Cache fetch_hit
到底意味着什么? 這是否意味着沒有找到緩存並且必須進行查詢?
不確定發生了什么 - 奇怪的是,我使用默認存儲或使用Dalli的memcached獲得相同的行為。
您正在緩存范圍,而不是查詢的實際結果。 Rails使用延遲加載,所以要強制查詢來執行,你需要把.to_a
(或.all
在Rails 3中),例如:
def self.top_ten
Rails.cache.fetch("top_ten_searches_cache", :expires_in => 1.day) do
Search.order("count DESC").limit(10).to_a
end
end
看到這里 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.