簡體   English   中英

Rails.cache - 工作但不工作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM