2012-01-13 75 views
8

我有一個rails應用程序,因爲我使用簡單的rails緩存。我的測試如下:Rails緩存過期

Rails.cache.write('temp',Date.today,:expires_in => 60.seconds) 

我可以通過Rails.cache.read('temp')Rails.cache.fetch('temp')閱讀。

問題是它沒有過期。 60秒後它仍然活着。任何人都可以告訴我這裏缺少什麼。

FYI:我在development.rb已經聲明如下:

config.action_controller.perform_caching = true 

config.cache_store = :memory_store 

有什麼我錯過了?我想過期緩存。

回答

9

經過一番搜索,我發現了一個可能的原因,爲什麼在60秒後緩存沒有被清理。

  1. 你打電話Rails.cache.write這是​​記錄。
  2. 它調用write_entry(namespaced_key(name, options), entry, options),其中您的選項:expires_inoptions參數的一部分。
  3. implementation of write_entry具有以下條件:

    if expires_in > 0 && !options[:raw] 
        # Set the memcache expire a few minutes in the future to support race condition ttls on read 
        expires_in += 5.minutes 
    end 
    

所以有5分鐘加入到你的60秒。 2個可能的解決方案:

  • 它只是生活:-)
  • 嘗試包括選擇:raw => true,也許這將跳過的條件,讓你的工作期滿被懷疑。
+0

感謝您的重播....讓我試試,讓你知道 – palani 2012-01-13 06:59:41

+0

是mliebelt權,也是一個很好的軌道緩存文檔,你可以在這裏找到http://guides.rubyonrails.org/caching_with_rails.html – 2012-01-13 07:23:46

5

:expires_in選項僅適用於兼容的商店(例如memcached) - 不是內存。

http://guides.rubyonrails.org/caching_with_rails.html

最後,如果你正在使用的memcached或的Ehcache,也可以通過 :expires_in。事實上,caches_action未使用的所有參數都是 發送到底層緩存存儲。