我有一个邮件队列。我想删除该队列中的所有Newsletter
个作业,只留下sign_up
个邮件。我基本上需要找到包含子字符串'Newsletter'的作业。我怎么能在Rails控制台或redis-cli中做到这一点?
答案 0 :(得分: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上不会运行其他命令。
相关讨论here。
答案 1 :(得分:0)
这里有一个如何删除工作的例子:
name = 'Newsletter'
queue = Sidekiq::Queue.new
queue.each do |job|
job.delete if job.klass.include? name
end
而不是klass.include?你可以用任何其他类型的东西来匹配你所寻找的东西。