TL;DR

Rails 8 removes Redis from its default stack and introduces SolidQueue, SolidCache, and SolidCable, which rely on an app's existing relational database instead of a separate key-value store. The new tooling uses database features like FOR UPDATE SKIP LOCKED, built-in scheduling and concurrency controls, and an accompanying UI called Mission Control.

What happened

With the release of Rails 8, Redis is no longer part of the framework's standard stack for queuing, caching, and real-time messages. Rails now provides SolidQueue for job processing, SolidCache for caching, and SolidCable as an ActionCable replacement; all operate on the application's relational database (PostgreSQL, SQLite, or MySQL). The SolidQueue design uses row locking with FOR UPDATE SKIP LOCKED to let many workers claim distinct jobs without blocking one another. Jobs are organized across three tables—jobs, scheduled_executions, and ready_executions—and separate processes (workers, dispatchers, schedulers, and a supervisor) coordinate activity. SolidQueue also includes cron-style recurring jobs driven by a recurring.yml configuration and offers built-in concurrency limits implemented with semaphore tables and a blocked-executions queue. A web UI, Mission Control Jobs, provides real‑time status, failed-job inspection, and schedule visualization.

Why it matters

  • Reduces operational complexity by removing a separate Redis service and consolidating datastore responsibilities into the existing relational database.
  • Eliminates the need to manage Redis-specific persistence, memory limits, HA clustering, and separate backup strategies.
  • Provides features that were previously paid Sidekiq add-ons—such as concurrency limits—at no extra cost in SolidQueue.
  • Shifts failure modes: if the application database fails, job processing and caching stop together, simplifying failure reasoning but concentrating risk.

Key facts

  • Rails 8 no longer requires Redis for job queuing, caching partials/data, or real-time messaging.
  • SolidQueue, SolidCache, and SolidCable run on the application's relational database (PostgreSQL, SQLite, or MySQL).
  • SolidQueue relies on FOR UPDATE SKIP LOCKED (available since PostgreSQL 9.5 and present in all versions since PostgreSQL 10) to avoid worker lock contention.
  • SolidQueue uses three principal tables: solid_queue_jobs, solid_queue_scheduled_executions, and solid_queue_ready_executions.
  • Workers can poll as frequently as 0.1 seconds for high-priority queues; dispatchers poll scheduled_executions once per second.
  • Recurring jobs are declared in config/recurring.yml using human-friendly schedules parsed with Fugit; the scheduler enqueues the next occurrence each run.
  • Concurrency limits are implemented with semaphores tracked in solid_queue_semaphores and waiting jobs in solid_queue_blocked_executions.
  • Mission Control Jobs is a free, open-source web interface tailored to SolidQueue that can be mounted into a Rails app to inspect and manage jobs.
  • The author argues that PostgreSQL's MVCC and autovacuum handle the insert/delete churn of job tables without special tuning.

What to watch next

  • How increased job volume and churn affect database performance and operational costs at very large scale — not confirmed in the source.
  • Migration patterns and tooling adoption from Sidekiq/Redis to SolidQueue across the Rails ecosystem — not confirmed in the source.
  • Long-term effects on backup and recovery practices when consolidating job state and application data into a single datastore — not confirmed in the source.

Quick glossary

  • Redis: An in-memory key-value data store commonly used for caching, message brokering, and job queues.
  • FOR UPDATE SKIP LOCKED: A SQL locking clause that acquires row locks for updates but skips rows currently locked by other transactions, enabling concurrent workers to avoid blocking.
  • MVCC: Multi-Version Concurrency Control, a database technique that provides concurrent access to data without readers blocking writers.
  • Job queue: A system that records units of work (jobs) to be processed asynchronously by worker processes.

Reader FAQ

Does Rails 8 remove Redis entirely?
Rails 8 excises Redis from its default technology stack for queuing, caching, and ActionCable usage; Redis is no longer required for those purposes in most apps.

Which databases does SolidQueue support?
The article describes SolidQueue operating on relational databases including PostgreSQL and mentions SQLite and MySQL as supported options.

How does SolidQueue avoid lock contention between workers?
It uses FOR UPDATE SKIP LOCKED to let multiple workers select and claim distinct jobs without blocking each other.

Are there built-in recurring job and concurrency features?
Yes. Recurring jobs are configured via config/recurring.yml and SolidQueue provides concurrency limits implemented with semaphore tables.

Is SolidQueue’s production performance comparable to Redis-based setups?
not confirmed in the source

REDIS REPLACEMENT, SOFTWARE DEVELOPMENT I Love You, Redis, But I’m Leaving You for SolidQueue Matt Kelly / November 19, 2025 Follow us Rails 8, the latest release of the popular…

Sources

Related posts

By

Leave a Reply

Your email address will not be published. Required fields are marked *