我有这个设置config.cache_store = :redis_store, ENV['REDIS_CACHE_URL']
$ redis-cli
127.0.0.1:6379> set random_key 1
OK
现在我转到控制台并执行Rails.cache.clear
,它返回零
我仍然能够访问红宝石中的密钥random_key
。它没有清除缓存。
我也看不出Rails.cache
在这里返回了什么,ruby/2.3.4/lib/ruby/gems/2.3.0/gems/railties-4.2.8/lib/rails.rb
Is Rails.cache.clear应该返回true?
如果我的理解有误,谁能帮帮我吗?
发布于 2017-07-24 12:11:17
redis-cache
将数据存储在特定的命名空间下。
例如,如果您已经根据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
,它就会。
发布于 2022-03-01 15:44:50
使用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
(来源)。
https://stackoverflow.com/questions/45280059
复制相似问题