我做了一些谷歌搜索,找不到這個問題的答案。 Rails允許爲其緩存一樣,指定到期時間:Rails緩存的默認失效時間是多少?
Rails.cache.fetch("my_var", :expires_in => 10.seconds)
但是,如果我沒有指定,會發生什麼:
Rails.cache.fetch("my_var")
它不會過期?有默認值嗎?我如何明確定義永不過期的東西?
我做了一些谷歌搜索,找不到這個問題的答案。 Rails允許爲其緩存一樣,指定到期時間:Rails緩存的默認失效時間是多少?
Rails.cache.fetch("my_var", :expires_in => 10.seconds)
但是,如果我沒有指定,會發生什麼:
Rails.cache.fetch("my_var")
它不會過期?有默認值嗎?我如何明確定義永不過期的東西?
這實際上取決於您正在使用哪種緩存存儲。 Rails提供了幾種,其中最受歡迎的是Memcached。 Memcached的主要功能之一是它automatically expires old unused records,所以你可以忘記:expire選項。
其他Rails緩存存儲,如內存存儲或redis存儲將保持不會過期日期,除非您明確指定何時執行此操作。
我使用:expires_in作爲一種意義來定義我認爲數據需要多長時間。如果我認爲可以使用5分鐘的舊數據,我使用expires_in:5分鐘。我的緩存的主要原因是加速併發和錘擊。 –
@OskarHolmkratz一個有用的替代方法是使用反映版本的緩存鍵(這就是爲什麼ActiveRecord具有基於updated_at時間戳的.cache_key屬性的原因)。那麼你不必擔心過期,你會顯示最新的結果,舊的數據將自動清除。 – mahemoff
他們永不過期。 (對於基於FileStore的緩存,這是Rails中的默認緩存)
如果在高速緩存存儲中找到它們的密鑰,則會使用該值。因此,建議至少添加任何到期時間。
這似乎是邏輯,但你有什麼參考?我一直在尋找很多東西,我無法找到它。此外,我的系統的行爲就像是有一個默認的失效時間,我想排除由於一些緩存隱藏默認值的可能性。另外,這不會依賴底層緩存存儲嗎? – joscas
使用達利memcached的(誰不),默認的到期時間是永遠,因爲@Rahul說。您不必擔心垃圾收集,因爲@icem說,memcached會拋出舊的未使用的記錄。
看到官方達利文檔:
Expires_in default is 0, which means never
https://github.com/mperham/dalli#configuration
你可以設置全局過期時間爲達利
config.cache_store = :dalli_store, { expires_in: 1.day}
和更好的單獨控制:
Rails.cache.write "some_cache_key", some_cachable_string, expires_in: 3.hours
新文檔中http://apidock.com/rails/ActiveSupport/Cache/Store/write沒有說太多,但老的作用: http://apidock.com/rails/ActiveSupport/Cache/MemCacheStore/write
手動到期緩存(如果發生的一些事件):
Rails.cache.delete "some_cache_key"
設置期滿的'fetch'不除非給出塊,否則不起作用 –