42

我在 rails-3 项目上使用 Resque 来处理计划每 5 分钟运行一次的作业。我最近做了一些事情,使这些工作的创建滚雪球,堆栈已经达到了 1000 多个工作。我修复了导致许多作业排队的问题,现在我遇到的问题是错误创建的作业仍然存在,因此由于作业被添加到具有 1000 多个作业的队列中,因此很难测试某些内容。我似乎无法停止这些工作。我尝试使用 flushall 命令从 redis-cli 中删除队列,但没有成功。我错过了什么吗?因为我似乎找不到摆脱这些工作的方法。

4

7 回答 7

68

根据上述答案,如果您需要清除所有队列,您可以使用以下方法:

Resque.queues.each{|q| Resque.redis.del "queue:#{q}" }
于 2013-01-09T16:44:13.083 回答
51

如果你弹出一个 rails 控制台,你可以运行这个代码来清除你的队列:

queue_name = "my_queue"
Resque.redis.del "queue:#{queue_name}"
于 2011-05-04T13:35:11.530 回答
36

Resque 已经有一种方法可以做到这一点 - 尝试(请参阅此处Resque.remove_queue(queue_name)的文档)。它在内部执行,但它也执行其他清理,并且通过使用 api 方法(而不是对 resque 的工作方式做出假设),您将更加面向未来。Resque.redis.del()

于 2013-04-22T00:36:54.003 回答
14

更新 rake 清理任务(根据最新的 redis 命令变化):https ://gist.github.com/1228863

于 2011-09-20T11:03:38.753 回答
14

这就是现在的工作:

Resque.remove_queue("...")
于 2015-03-31T10:05:34.020 回答
4

使用 Resque API 比删除 Resque 的 Redis 上的所有内容更安全和防弹。Resque 在内部进行了一些清洁。

如果要删除所有队列和关联的排队作业:

Resque.queues.each {|queue| Resque.remove_queue(queue)}

下次作业入队时将重新创建队列。

文档

于 2018-08-14T12:58:43.443 回答
4

进入redis控制台:

redis-cli

列出数据库:

127.0.0.1:6379> KEYS *
 1) "resque:schedules_changed"
 2) "resque:workers"
 3) "resque:queue:your_overloaded_queue"

"resque:queue:your_overloaded_queue"- 你需要的分贝。

然后运行:

DEL resque:queue:your_overloaded_queue

或者,如果您想删除队列中的指定作业,则使用LRANGE命令从 db 中列出几个值:

127.0.0.1:6379> LRANGE resque:queue:your_overloaded_queue 0 2
1) "{\"class\":\"AppClass\",\"args\":[]}"
2) "{\"class\":\"AppClass\",\"args\":[]}"
3) "{\"class\":\"AppClass\",\"args\":[]}"

然后将一个值复制/粘贴到LREM命令:

127.0.0.1:6379> LREM resque:queue:your_overloaded_queue 5 "{\"class\":\"AppClass\",\"args\":[]}"
(integer) 5

其中 5 - 要删除的元素数。

于 2016-04-01T19:50:30.373 回答