1

我有一个邮件队列。我想删除Newsletter该队列中的所有作业,只留下sign_up邮件。我基本上需要找到包含子字符串'Newsletter'的工作。如何在 Rails 控制台或 redis-cli 中执行此操作?

4

2 回答 2

2

据我了解,您基本上只是想以原子方式删除带有字符串“Newsletter”的键作为单个事务。这样做的方法是:

redis-cli -n [some_db] -h [some_host_name] EVAL "return redis.call('DEL', unpack(redis.call('KEYS', '*' .. ARGV[1] .. '*')))" 0 Newsletter

您在上面的代码中所做的是运行一个 lua 脚本,该脚本查询数据库 [some_db] 中包含子字符串“Newsletter”的所有键。然后将它们全部删除。这一切都是作为一个事务完成的,因此从KEYS运行到删除所有相关键的时间,在 Redis 上没有运行其他命令。

相关讨论在这里

于 2013-06-14T20:29:51.137 回答
0

这里是如何删除作业的示例:

name = 'Newsletter'
queue = Sidekiq::Queue.new

queue.each do |job|
   job.delete if job.klass.include? name
end

而不是 klass.include?你可以用任何其他的东西来匹配你正在寻找的东西。

于 2015-10-29T15:40:32.217 回答