복붙노트

[REDIS] 어떻게 resque 노동자 큐에 작업을 파괴?

REDIS

어떻게 resque 노동자 큐에 작업을 파괴?

나는 5 분마다 실행되도록 예약 된 작업을 처리하기 위해 레일-3 프로젝트에 Resque을 사용하고 있습니다. 나는 최근에 이러한 작업의 생성을 급증 스택 1000 작업을 통해 충돌했다고 뭔가를했다. 나는 많은 작업이 대기 할 것을 인해 지금은이 문제가 버그에 의해 생성 된 작업이 여전히 존재하고 작업이 1000 개 작업으로 큐에 추가되기 때문에, 따라서 그것은 테스트 뭔가 어려워지고 있다는 것을 문제를 해결했습니다. 나는이 작업을 중지 할 수없는 것. 나는 flushall 명령을 사용하여 레디 스-CLI에서 큐를 제거하는 시도했지만 작동하지 않았다. 나는 뭔가를 놓치고 있습니까? 나는이 작업 없애는 방법을 찾을 수 없습니다 사촌.

해결법

  1. ==============================

    1.A는 콘솔을 레일 ​​열어 팝업 경우에, 당신은 당신의 대기열 (들) 지울이 코드를 실행할 수 있습니다 :

    A는 콘솔을 레일 ​​열어 팝업 경우에, 당신은 당신의 대기열 (들) 지울이 코드를 실행할 수 있습니다 :

    queue_name = "my_queue"
    Resque.redis.del "queue:#{queue_name}"
    
  2. ==============================

    2.당신이 당신의 큐의 모든 선택을 취소해야하는 경우에는 다음을 사용할 수 위의 답변의 오프 재생 :

    당신이 당신의 큐의 모든 선택을 취소해야하는 경우에는 다음을 사용할 수 위의 답변의 오프 재생 :

    Resque.queues.each{|q| Resque.redis.del "queue:#{q}" }
    
  3. ==============================

    3.Resque.remove_queue (대기열 이름)를보십시오 (여기에 설명서를 참조하십시오) - Resque 이미이 작업을 수행하는 방법이있다. 내부적으로는 Resque.redis.del ()는 수행하지만, 그것은 또한 다른 정리 작업을 수행 및 API 방법을 사용하여 (이 아닌 방법 resque 작품에 대한 가정 만들기) 좀 더 미래 지향적 있습니다을하여.

    Resque.remove_queue (대기열 이름)를보십시오 (여기에 설명서를 참조하십시오) - Resque 이미이 작업을 수행하는 방법이있다. 내부적으로는 Resque.redis.del ()는 수행하지만, 그것은 또한 다른 정리 작업을 수행 및 API 방법을 사용하여 (이 아닌 방법 resque 작품에 대한 가정 만들기) 좀 더 미래 지향적 있습니다을하여.

  4. ==============================

    4.(최신 레디 스 명령의 변화에 ​​따라) 청산에 대한 업데이트 레이크 작업 : https://gist.github.com/1228863

    (최신 레디 스 명령의 변화에 ​​따라) 청산에 대한 업데이트 레이크 작업 : https://gist.github.com/1228863

  5. ==============================

    5.이제이 작동하는 것입니다 :

    이제이 작동하는 것입니다 :

    Resque.remove_queue("...")
    
  6. ==============================

    6.반복 콘솔 입력 :

    반복 콘솔 입력 :

    redis-cli
    

    목록 데이터베이스 :

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

    "resque : 큐 : your_overloaded_queue"- 당신이 필요로하는 DB.

    그런 다음 실행 :

    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.

  7. ==============================

    7.그것은 오히려 Resque의 레디 스의 모든 내용을 삭제하는 것보다 Resque API를 사용하여 안전하고 방탄입니다. Resque은 내부에 약간의 청소를한다.

    그것은 오히려 Resque의 레디 스의 모든 내용을 삭제하는 것보다 Resque API를 사용하여 안전하고 방탄입니다. Resque은 내부에 약간의 청소를한다.

    모든 큐와 관련된 큐에 작업을 제거하려면 :

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

    작업이 대기열에 다음 번에 다시 만들어-대기열이 될 것입니다.

    선적 서류 비치

  8. from https://stackoverflow.com/questions/5880962/how-to-destroy-jobs-enqueued-by-resque-workers by cc-by-sa and MIT license