Search code examples
ruby-on-railssidekiq

Are there console commands to look at whats in the queue and to clear the queue in Sidekiq?


I'm used to using delayed_jobs method of going into the console to see whats in the queue, and the ease of clearing the queue when needed. Are there similar commands in Sidekiq for this? Thanks!


Solution

  • I haven't ever used Sidekiq, so it's possible that there are methods just for viewing the queued jobs, but they would really just be wrappers around Redis commands, since that's basically all Sidekiq (and Resque) is:

    # See workers
    Sidekiq::Client.registered_workers
    
    # See queues
    Sidekiq::Client.registered_queues
    
    # See all jobs for one queue
    Sidekiq.redis { |r| r.lrange "queue:app_queue", 0, -1 }
    
    # See all jobs in all queues
    Sidekiq::Client.registered_queues.each do |q|
      Sidekiq.redis { |r| r.lrange "queue:#{q}", 0, -1 }
    end
    
    # Remove a queue and all of its jobs
    Sidekiq.redis do |r| 
      r.srem "queues", "app_queue"
      r.del  "queue:app_queue"
    end
    

    Unfortunately, removing a specific job is a little more difficult as you'd have to copy its exact value:

    # Remove a specific job from a queue
    Sidekiq.redis { |r| r.lrem "queue:app_queue", -1, "the payload string stored in Redis" }
    

    You could do all of this even more easily via redis-cli :

    $ redis-cli
    > select 0 # (or whichever namespace Sidekiq is using)
    > keys * # (just to get an idea of what you're working with)
    > smembers queues
    > lrange queues:app_queue 0 -1
    > lrem queues:app_queue -1 "payload"