我正在使用 Resque
(和 redis)来管理为我的 Rails 3 应用程序发送通知电子邮件。
我正在使用 Whenever
crontab gem 每 30 分钟对一个作业进行排队,以检查是否需要发送通知。
我在 resque-web
界面中注意到每次成功完成时都有一个“已处理”作业。即使我重新启动 redis 和我的服务器,这个“完成”队列似乎也永远不会清除。这本身并没有打扰我,但我想确保我不应该以某种方式清除它或其他东西。所有这些已完成的工作是否只是坐在 Redis 中占用内存?当达到一定长度时,Redis 会自动从最早的开始清除它们吗?
谢谢
最佳答案
Redis 中已处理的键包含有关 Resque 总共处理了多少个作业以及由不同的 worker 处理的信息。
一旦工作人员处理完工作, done_working
调用 worker ,调用 processed!
:
def processed!
Stat << "processed"
Stat << "processed:#{self}"
end
Stat
是 Resque 的模块,用于跟踪 Resque 实例的统计信息。它只保留整数,不存储所有已完成作业的历史记录,只存储整数计数,例如:
- 总共失败了多少个作业
- 一个特定的 worker 有多少工作失败了
- 总共处理了多少作业
- 一个特定的 worker 处理了多少个工作
查看模块源代码时可以看到这一点,<<
简单地增加一个整数:
def <<(stat)
incr stat
end
你不应该担心冲洗它。与您拥有的 worker 数量成正比的数据非常少。 Resque 确实保留了失败的作业,但这是一件好事,可能不是你应该刷新的东西。
关于ruby-on-rails - 我需要清除我的 Resque 'processed' 队列吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18680864/