메일러 대기열이 있습니다. 대기열에있는 모든 Newsletter
개의 작업을 삭제하고 싶습니다. sign_up
개의 메일 만 남겨 두었습니다. 기본적으로 '회보'라는 하위 문자열이 포함 된 작업을 찾아야합니다. Rails 콘솔이나 redis-cli에서는 어떻게 할 수 있습니까?문자열 일치로 일괄 처리 된 Sidekiq 작업 삭제
1
A
답변
2
기본적으로 나는 이것을 이해하기 때문에 단일 트랜잭션으로 "Newsletter"라는 문자열이있는 키를 기본적으로 원자 적으로 삭제하려고합니다. 이 작업을 수행하는 방법은 다음과 같습니다
redis-cli -n [some_db] -h [some_host_name] EVAL "return redis.call('DEL', unpack(redis.call('KEYS', '*' .. ARGV[1] .. '*')))" 0 Newsletter
위 그 (것)들에서 문자열 "뉴스"가 데이터베이스에있는 모든 키 [some_db]에 대한 조회하는 루아 스크립트를 실행하는 코드에서 무슨 일을하는지. 그런 다음 모두 삭제합니다. 이 작업은 모두 하나의 단일 트랜잭션으로 수행되므로 KEYS
이 실행 된 시점부터 Redis에서 실행되는 다른 명령은 모든 관련 키가 삭제 될 때까지 실행되지 않습니다.
관련 토론 here. 여기
0
작업 제거하는 방법에 대한 예 : 대신 klass.include의
name = 'Newsletter'
queue = Sidekiq::Queue.new
queue.each do |job|
job.delete if job.klass.include? name
end
를? 당신은 다른 어떤 종류의 것을 찾고있는 것을 일치시킬 수 있습니다.
나는 혼자 -n 및 -h 플래그를 남겨 둘 수 있다고 가정하고 있지만 "(오류) 오류 실행 스크립트 (f_729a221194284c3756b416201c816f2c1996514f 호출) : 루아 스크립트에서 Redis 명령을 호출하는 번호가 잘못되었습니다."오류가 발생합니다. 내가 뭘 잘못했는지 알아? – lulalala
또 다른 것은 모든 키 (키 *)의 목록을 읽고 "뉴스 레터"를 보지 못합니다. 나는 sidekiq이 직업을 다르게 저장한다고 생각한다. – lulalala
@lulalala 예, "뉴스 레터"가 그 예입니다. 이것이 효과를 발휘할 수있는 방법을 정확히 찾아야합니다. 오류에 관해서는 위와 똑같이 모든 것을 넣었는지 확인하십시오. Redis 2.6 이상입니다. 모든 것은 저에게 잘 돌아가며, 여러 개의 redis 서버에서 정기적으로 사용하는 명령입니다. – Eli