[英]Rails.cache.clear fails with undefined method `clear' for nil:NilClass when running in a rake task
[英]Rails.cache.clear returns nil
我有這個設置config.cache_store =:redis_store, ENV['REDIS_CACHE_URL']
$ redis-cli
127.0.0.1:6379> set random_key 1
OK
現在我 go 到控制台並執行Rails.cache.clear
返回 nil
而且我仍然能夠訪問 redis-cli 中的密鑰random_key
。 它沒有清除緩存。
我也看不懂Rails.cache
在這里返回的內容ruby/2.3.4/lib/ruby/gems/2.3.0/gems/railties-4.2.8/lib/rails.rb
Rails.cache.clear 應該返回 true 嗎?
如果我的理解有誤,有人可以幫助我嗎?
redis-cache
將數據存儲在特定的名稱空間下。
例如,如果您已按照Documentation來配置redis-store
,那么緩存鍵將存儲在cache
名稱空間下。 這意味着,當您使用Rails.cache.write("random_key", "key")
,密鑰cache:random_key
將出現在Redis中。 因此,當您使用Rails.cache.clear
,僅cache
命名空間下的鍵將被刪除。
因此,如果您在Redis中手動創建random_key
, Rails.cache.clear
不會將其刪除。 但是,如果您手動創建cache:random_key
,它將成功。
使用Rails.cache.clear
時要小心,它會使應用程序的所有密鑰失效(來源)
[~不確定這是否是這個答案的最佳位置~]
這篇有用的文章是我理解將 Rails 版本從 5.1+ 更改為 Rails 6.1+ 時的緩存的好方法。 本文討論了在有或沒有版本控制的情況下生成緩存鍵的選項。
在我的應用程序實例中,升級到 Rails 6.1 時需要版本控制但未打開:
#in application.rb
config.active_record.collection_cache_versioning = true
然后在調用object.cache_key
的應用程序代碼中,我不得不將其更改為object.cache_key_with_version
(source)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.