rails 中基于文件的缓存的文档说:
请注意,缓存将不断增长,直到磁盘已满,除非您 定期清除旧条目。
不幸的是,它没有提供任何有关如何定期清除旧条目的信息。为
:expires_in
设置适当的值是否可以完成这项工作,或者清除缓存背后是否存在其他某种黑魔法?
此外,文档还提供了限制基于内存的缓存大小的选项:
config.cache_store = :memory_store, { size: 64.megabytes }
这也适用于基于文件的缓存吗?更重要的是,当缓存增长低于该大小限制时会发生什么?它会删除旧的缓存值还是会抛出某种异常?
提前致谢, 丹尼尤
使用 FileStore 缓存进行实验,我发现
:expires_in
选项有效,但 :size
选项无效。
如果您想指定选项,那么您还需要指定路径,请尝试以下示例:
config.cache_store = :file_store, Rails.root.join('tmp', 'cache'), { expires_in: 1.分钟 }
将代码放入
config/application.rb
并记得激活config/environments/development.rb
中的缓存并重新启动应用程序。
附注我用1分钟轻松完成快速测试。
是该限制也适用于基于文件的缓存。 是
:expires_in
的值就可以完成这项工作。
达到此限制后,将不再缓存任何内容。没有抛出异常。
size
选项适用于MemoryStore
缓存,但不适用于FileStore
缓存。检查 FileStore
的源代码,您会发现 FileStore 不支持 size
选项,与 MemoryStore 不同。
FileStore
缓存条目将在读取时过期(被删除)并重新创建,但没有任何方法显式删除未使用的过期条目,因此缓存将无限增长。如果您想定期清理过期的条目,您可以显式运行Rails.cache.cleanup
。