如何解决Sidekiq Worker 不会过期缓存
我们的架构有只运行 Sidekiq 工作进程的专用服务器,即没有应用服务器。我们正在进行一些模型缓存 - 模型内部对 Rails.cache 的所有调用都指定了一个 expires_in
值,但不会清除过期的缓存。
有时磁盘 inode 会填满,因为 tmp/cache
永远不会被清理。
修复很简单 - 为 tmp:cache:clear
运行一个 cron 作业,但也许社区可以在这种情况下提供一些指导和理解,了解 Rails 如何清除过期的模型缓存键,尤其是当 Sidekiq 工作人员是唯一的时在服务器上运行的东西。
解决方法
过期由缓存存储处理,如果它支持这样的话。 Rails 的默认缓存存储(文件存储)很简单,它知道的不多。您在做什么,手动清除缓存是文档(如下)所建议的。
你可以试试 Redis 或 Memcached,他们知道如何过期。
摘自ActiveSupport::Cache::FileStore
2.4 ActiveSupport::Cache::FileStore
这个缓存存储使用文件系统来存储条目。初始化缓存时必须指定存储文件的目录路径。
由于缓存会一直增长到磁盘已满,因此建议定期清除旧条目。
如果没有提供明确的 config.cache_store,这是默认的缓存存储实现(在“#{root}/tmp/cache/”)。
另一个来自ActiveSupport::Cache::Store
:expires_in - 此选项设置缓存条目的过期时间(以秒为单位),如果缓存存储支持它,它将自动从缓存中删除。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。