本篇文章更新時間:2026/01/15
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣 或 新台幣 贊助支持。
內容目錄
我為什麼想從 Redis 退場:讀《I Love You, Redis, But I’m Leaving You for SolidQueue》有感
編輯前言:Rails 8 移除了 Redis 這件事,本質上不只是技術選型的調整,而是對整個開發者生態的一次「簡化宣言」。這篇文章讓我重新檢視:我們真的需要這麼複雜的技術堆疊嗎?
原文來源:I Love You, Redis, But I’m Leaving You for SolidQueue
核心觀點 (Key Takeaways)
- Redis 很強,但它的維運成本往往被低估;SolidQueue 讓 PostgreSQL 成為足以取代 Redis 的通用解法。
- Rails 8 的 SolidQueue、SolidCache、SolidCable 是基於資料庫的新世代基礎設施,讓「不用 Redis」成為可能。
- 對 95% 的應用而言,PostgreSQL 的吞吐量就足以支撐背景工作隊列,不需要 Redis 的極致效能。
深入解析
這篇文章從開頭就拋出一個可能會讓 Rails 社群心頭一震的訊息:Rails 8 不再默認使用 Redis。換句話說,過去十多年你熟悉的 Sidekiq + Redis 組合,不再是唯一選項,甚至不是預設路線。
作者並不是在唱衰 Redis,而是坦誠描述:Redis 的強大,也伴隨著不容忽視的「複雜度負擔」。
原文直接列出 Redis 的「隱藏成本」:你要維護 Redis server、設定 persistence、監控 memory、維護 HA、高可用叢集、甚至還得理解兩套資料儲存語意。
這些對小團隊來說都是沈重負擔。而 SolidQueue 的設計則完全反其道而行:用你已經在用的資料庫,處理你原本需要 Redis 才能做到的事。
SolidQueue 如何取代 Redis?
核心概念其實非常簡單:靠 PostgreSQL 9.5 引入的 FOR UPDATE SKIP LOCKED。這讓 worker 在競爭同一批 job 時,不會卡住彼此,進而模擬 Redis 那種高速、原子性的任務鎖定行為。
SolidQueue 把工作分散在三個資料表:
- solidqueuejobs:所有 job 的 metadata
- solidqueuescheduled_executions:排程中的 job
- solidqueueready_executions:可立即執行的 job
這套設計加上 PostgreSQL 的 MVCC 機制,使大量 insert/delete 也能被 autovacuum 消化掉,不需額外調整。
內建排程與 concurrency control:Redis 組合包直接退場
以前你可能需要 Sidekiq + sidekiq-cron + Redis 才能做到的一堆事,SolidQueue 直接內建。
- recurring jobs 用
config/recurring.yml設定即可 - concurrency limits 原本是 Sidekiq Enterprise 才有的付費功能,SolidQueue 竟然免費
這裡我很喜歡作者一句話:
SolidQueue 給你這些功能「for free」,而且完全靠資料庫原生機制,不需要外部協調。
Mission Control:不需付費的 Sidekiq Dashboard 替代品
Mission Control Jobs 提供:
- 即時 job 狀態
- 失敗 job 的堆疊追蹤
- 排程視覺化
- queue throughput 趨勢圖
- SQL 查詢 job 內容
這點我認為非常重要:SQL 是大家都會用的語言,不需要額外工具,不需要學 Redis 指令。
筆者心得與啟發
讀完這篇文章後,我最大的感想是:開發者太常在堆功能,而不是解決問題。 Redis 是強,但大多數時候我們根本用不到它的極限,而卻要為它付上維運成本、部署複雜度與系統風險。
Rails 8 想傳達的訊息很明確:
能用資料庫解決的事情,就不要再引入一個新服務。
這不僅是技術簡化,更是思維簡化。 SolidQueue 不是要挑戰 Redis 的效能,而是提出一個更務實的提問:你真的需要 Redis 嗎?
如果你的工作量真的高到一天處理幾千萬 job,當然 Redis 還是必要。但對 99% 的應用來說,把整套基礎設施收斂到 PostgreSQL,是再合理不過的演化。
這篇文章也讓我開始反思自己在做系統架構時,是否太容易「想當然爾」地依賴 Redis、K8s、Sidekiq 等成熟技術,而沒有仔細問自己:「我到底是不是需要這麼複雜的堆疊?」
對於正在寫 Rails 8 或準備升級的團隊,我強烈建議把 SolidQueue 實際跑起來試試看。或許你會驚訝:把 Redis 移除後,你的整個開發流程竟然變得更輕盈。
