web-dev-qa-db-ja.com

Railsキャッシュのデフォルトの有効期限はどれくらいですか?

グーグルをしてみましたが、この質問に対する答えが見つかりませんでした。 Railsは、次のようにキャッシュの有効期限を指定できます。

Rails.cache.fetch("my_var", :expires_in => 10.seconds)

しかし、何も指定しないとどうなりますか。

Rails.cache.fetch("my_var")

期限切れになることはありませんか?デフォルト値はありますか?期限切れにならないものを明示的に定義するにはどうすればよいですか?

21
joscas

実際には、使用しているキャッシュストレージによって異なります。 Railsはいくつかを提供し、そのうちの1つは Memcached です。Memcachedの重要な機能の1つは、 古い未使用のレコードを自動的に期限切れにする 、 :expireオプションを忘れることができます。

その他のRailsメモリストレージやredisストレージなどのキャッシュストレージは、いつ有効にするかを明示的に指定しない限り、有効期限が切れません。

Railsでのキャッシュキーの有効期限の詳細

15
icem

@Rahulが言うように、Dalliをmemcached(そうでない場合)に使用すると、デフォルトの有効期限は決してありません。 @icemが言うように、ガベージコレクションについて心配する必要はありません。memcachedは古い未使用のレコードを破棄します。

公式のdalliのドキュメントを参照してください。

Expires_in default is 0, which means never

https://github.com/mperham/dalli#configuration

dalliのグローバル有効期限を設定できます

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"
10
oma

それらは決して切れません。 (RailsのデフォルトであるFileStoreベースのキャッシュの場合)

それらのキーがキャッシュストアで見つかった場合、その値が使用されます。したがって、少なくとも有効期限を追加することを常にお勧めします。

6
Rahul garg