Introduction
Sidekiq is the most popular Redis-backed job backend for Rails. If your application already uses Redis or requires Sidekiq-specific features like a real-time web dashboard and high throughput, it is a proven alternative to Solid Queue.
Key Concepts
- Sidekiq: A multi-threaded, Redis-backed background job processor.
- Redis: An in-memory data store used by Sidekiq for job queuing.
- Sidekiq::Web: A built-in web dashboard for monitoring queues and jobs.
Real World Context
Sidekiq is used by companies processing millions of jobs per day. It provides sub-millisecond enqueue times and a rich plugin ecosystem.
Deep Dive
Installation
ruby# Gemfile gem 'sidekiq'
ruby# config/application.rb config.active_job.queue_adapter = :sidekiq
Configuration
yaml# config/sidekiq.yml :concurrency: 10 :queues: - [critical, 3] - [default, 2] - [low, 1] production: :concurrency: 25
Redis Configuration
ruby# config/initializers/sidekiq.rb Sidekiq.configure_server do |config| config.redis = { url: ENV.fetch('REDIS_URL', 'redis://localhost:6379/0') } end Sidekiq.configure_client do |config| config.redis = { url: ENV.fetch('REDIS_URL', 'redis://localhost:6379/0') } end
Running Sidekiq
bashbundle exec sidekiq bundle exec sidekiq -C config/sidekiq.yml
Web UI
ruby# config/routes.rb require 'sidekiq/web' Rails.application.routes.draw do authenticate :user, ->(u) { u.admin? } do mount Sidekiq::Web => '/sidekiq' end end
Common Pitfalls
- Not protecting the Sidekiq web dashboard — Without authentication, anyone can view job data and retry jobs.
- Ignoring Redis memory — Redis stores everything in memory. Monitor usage closely.
Best Practices
- Use a dedicated Redis instance — Separate from cache Redis to prevent data loss during evictions.
- Set queue weights thoughtfully —
[critical, 3]means critical is polled 3x more often.
Summary
- Sidekiq is Redis-backed with a mature ecosystem.
- Configure via
config/sidekiq.ymlfor concurrency and queues. - Always protect the web dashboard with authentication.
- Use a dedicated Redis instance in production.
Code Examples
ruby
# config/initializers/sidekiq.rb
Sidekiq.configure_server do |config|
config.redis = { url: ENV.fetch('REDIS_URL', 'redis://localhost:6379/0') }
end
Sidekiq.configure_client do |config|
config.redis = { url: ENV.fetch('REDIS_URL', 'redis://localhost:6379/0') }
end