【发布时间】:2015-10-29 23:40:32
【问题描述】:
我有一个邮件队列。我想删除该队列中的所有Newsletter 作业,只留下sign_up 邮件。我基本上需要找到包含子字符串'Newsletter'的工作。如何在 Rails 控制台或 redis-cli 中执行此操作?
【问题讨论】:
我有一个邮件队列。我想删除该队列中的所有Newsletter 作业,只留下sign_up 邮件。我基本上需要找到包含子字符串'Newsletter'的工作。如何在 Rails 控制台或 redis-cli 中执行此操作?
【问题讨论】:
据我所知,您基本上只是想以原子方式删除其中带有字符串“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 上运行其他命令。
相关讨论here。
【讨论】:
这里是如何删除作业的示例:
name = 'Newsletter'
queue = Sidekiq::Queue.new
queue.each do |job|
job.delete if job.klass.include? name
end
而不是 klass.include?你可以用任何其他类型的东西来匹配你正在寻找的东西。
【讨论】: