Rails:控制文件存储缓存大小

问题描述 投票:0回答:3

rails 中基于文件的缓存的文档说:

请注意,缓存将不断增长,直到磁盘已满,除非您 定期清除旧条目。

不幸的是,它没有提供任何有关如何定期清除旧条目的信息。为

:expires_in
设置适当的值是否可以完成这项工作,或者清除缓存背后是否存在其他某种黑魔法?

此外,文档还提供了限制基于内存的缓存大小的选项:

config.cache_store = :memory_store, { size: 64.megabytes }

这也适用于基于文件的缓存吗?更重要的是,当缓存增长低于该大小限制时会发生什么?它会删除旧的缓存值还是会抛出某种异常?

提前致谢, 丹尼尤

ruby-on-rails ruby ruby-on-rails-3 caching
3个回答
6
投票

使用 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分钟轻松完成快速测试。


2
投票

该限制也适用于基于文件的缓存。

:expires_in
的值就可以完成这项工作。

达到此限制后,将不再缓存任何内容。没有抛出异常。


0
投票

size
选项适用于
MemoryStore
缓存,但不适用于
FileStore
缓存。检查
FileStore
的源代码,您会发现 FileStore 不支持
size
选项,与 MemoryStore 不同。

FileStore
缓存条目将在读取时过期(被删除)并重新创建,但没有任何方法显式删除未使用的过期条目,因此缓存将无限增长。如果您想定期清理过期的条目,您可以显式运行
Rails.cache.cleanup

© www.soinside.com 2019 - 2024. All rights reserved.