Rails 8 新特性全解析
Rails 8 新特性全解析Solid Queue / Cache / Cable抛弃 Redis 方案实战——当 Rails 决定替你砍掉整个 Redis 依赖这不是噱头是一场架构范式的革命。‌一、为什么 Rails 8 要干掉 Redis先说一句得罪人的话‌Redis 很强但 95% 的应用根本用不到它的极限性能却要为它付出全部的运维代价。‌你要维护 Redis server要配置 persistence要监控内存要搭建 HA 高可用集群还要理解两套完全不同的数据存储语义。对小团队来说这不是技术选型这是技术负担。David Heinemeier Hansson 在 Rails World 上的那句话至今振聋发聩Rails 8 的想法是摆脱趋势跟踪拒绝一些行业中流行的想法——比如不敢碰 Linux 服务器或者非要给自己的应用塞一个 Redis。于是Rails 8 带来了三把刀‌Solid Queue、Solid Cache、Solid Cable‌——全部基于数据库驱动全部零额外依赖。Redis可以退场了。二、Solid Queue用 PostgreSQL 取代 Sidekiq Redis2.1 核心原理FOR UPDATE SKIP LOCKEDSolid Queue 的技术内核极其优雅。它利用 PostgreSQL 9.5 引入的 FOR UPDATE SKIP LOCKED 语句让多个 Worker 在竞争同一批 Job 时互不阻塞——完美模拟了 Redis 那种高速、原子性的任务锁定行为而无需任何外部服务。数据只存三张表表格表名 用途solid_queue_jobs 所有 Job 的元数据solid_queue_scheduled_executions 排程中的 Jobsolid_queue_ready_executions 可立即执行的 Job配合 PostgreSQL 的 MVCC 机制大量 insert/delete 被 autovacuum 自动消化‌你甚至不需要调优‌。2.2 实战从零搭建新建 Rails 8 项目自动集成‌bashrails new myapp# Solid Queue 已是默认后端无需任何配置已有项目升级‌ruby# Gemfilegem solid_queuebashbin/rails generate solid_queue:installbin/rails db:migrate核心配置 config/queue.yml‌yamlproduction:dispatchers: 2workers:- queues: [critical]concurrency: 10- queues: [default, mailers]concurrency: 5scheduler:dynamic_tasks_enabled: true # 运行时动态增删定时任务启动‌bashbin/jobs start # Fork 模式默认最佳性能bin/jobs start --mode async # Async 模式单进程多线程省资源bin/jobs start --skip-recurring # 开发环境跳过定时任务2.3 杀手级功能动态任务调度这是 Sidekiq Enterprise 才有的付费功能Solid Queue 免费送ruby# 运行时添加定时任务SolidQueue::RecurringTask.create(job_class: DailyReportJob,cron_expression: 0 0 * * *,queue_name: reports)# 运行时移除task SolidQueue::RecurringTask.find_by(job_class: DailyReportJob)task.destroy2.4 对比 Sidekiq Redis一张表看清差距表格维度 Sidekiq Redis Solid Queue吞吐模型 多线程但 Redis 是单点瓶颈 数据库原生 MVCC内存占用200 QPS ~1GB12 Worker ~320MB4 Worker月账单AWS t3.medium ~$84 ~$42监控 UI ✅ 自带 Web UI ✅ Mission Control免费替代 Sidekiq Dashboard故障转移 Redis 主从切换有窗口期 实测 12 秒内完成37 个任务零丢失自动续跑并发控制 ❌ 付费功能 ✅ 免费内建外部依赖 必须 Redis 无需任何额外服务但请注意‌ Solid Queue 要求 Redis 配置为单节点或主从模式不支持 Redis Cluster因为它的原子操作依赖 Lua 脚本在单个 Redis 实例上执行。如果你已在用 Redis Cluster要么拆出专用实例要么接受部分高级功能降级。三、Solid Cable用数据库取代 Redis 做 WebSocketAction Cable 终于不再被 Redis 绑架了。Solid Cable 的工作方式‌ 消息存入数据库表通过轮询机制检查更新。虽然是轮询但在大多数场景下性能与 Redis 相当且‌不受 PostgreSQL 适配器 8KB 消息负载限制‌。yaml# config/cable.ymlproduction:polling_interval: 0.1message_retention: 1.hourautotrim: true兼容 MySQL、SQLite、PostgreSQL。如果你的应用本来就不需要 RedisSolid Cable 让你彻底摆脱对它的依赖。四、Solid Cache磁盘缓存取代内存缓存Redis 和 Memcached 的替代品来了。Solid Cache 利用磁盘存储提供更大的数据集‌不受内存限制加密支持‌保留策略Retention Policy‌更低的成本‌磁盘比内存便宜一个数量级对于缓存 HTML 片段、API 响应这类场景Solid Cache 是降维打击。五、AI 后台任务实战Solid Queue 优先级队列 智能重试当你的 Rails 应用接入 AIGPT、Embedding 等传统的作业管理思维会彻底失效。AI 任务‌慢、贵、受限、易失败‌必须用专门的模式来治理。5.1 优先级队列设计ruby# app/jobs/ai_chat_job.rbclass AiChatJob ApplicationJobqueue_as :ai_realtime # 实时交互毫秒级响应def perform(conversation_id, message)# 调用 AI 聊天 APIendend# app/jobs/batch_embedding_job.rbclass BatchEmbeddingJob ApplicationJobqueue_as :embeddings # 批量向量化可延迟一整夜def perform(document_ids)# 批量生成向量endend5.2 分级调度配置yaml# config/solid_queue.ymlproduction:dispatchers:- polling_interval: 1batch_size: 500workers:- queues: [ai_realtime]threads: 3polling_interval: 0.1 # 0.1秒检查一次极快响应- queues: [critical, default]threads: 3polling_interval: 0.5- queues: [ai_batch, embeddings]threads: 2polling_interval: 2 # 2秒检查一次节省数据库压力关键认知‌ polling_interval 是最容易被忽视但最致命的参数。每个 Worker 线程都按这个间隔查询数据库间隔越短、队列越多数据库压力越大。务必根据实际负载调优。5.3 智能重试指数退避 抖动AI 任务最常见的失败原因是‌速率限制HTTP 429‌和‌超时‌。固定间隔重试等于对已受限的 API 发起 DDoS 攻击。ruby# app/jobs/concerns/ai_base_job.rbmodule AiBaseJobextend ActiveSupport::Concernincluded do# 速率限制重试5次多项式退避 抖动retry_on Faraday::TooManyRequestsError,wait: :polynomially_longer,attempts: 5# 网络超时重试3次多项式退避retry_on Faraday::TimeoutError,wait: :polynomially_longer,attempts: 3# AI 通用错误固定等待10秒最多3次retry_on OpenAI::Error,wait: 10.seconds,attempts: 3# 记录不存在直接丢弃不重试discard_on ActiveRecord::RecordNotFoundendend六、Rails 8 部署革命Kamal 2别忘了Rails 8 还带来了 ‌Kamal 2‌——一行命令完成生产部署bashkamal setup # 两分钟内配置好生产服务器kamal deploy # 零停机部署内置 ‌Thruster‌ 代理不再需要 NginxKamal Proxy‌ 取代 Traefik支持 Lets Encrypt 自动 SSL集成 1Password / Bitwarden 管理密码Docker 容器开箱即互联网就绪七、灵魂拷问你真的需要 Redis 吗表格场景 推荐方案日均 100 万 JobPostgreSQL 够用 ‌Solid Queue‌零额外依赖日均 1000 万 Job极致吞吐需求 ‌Sidekiq Redis‌依然是王者不需要 Redis 做其他事 ‌Solid Cable Solid Cache‌全栈数据库驱动小型项目 / 独立开发者 ‌SQLite 后端‌Rails 8 官方支持部署成本趋近于零结语Rails 8 的三大 Solid不是要挑战 Redis 的性能极限——‌它是在问你一个更务实的问题你真的需要 Redis 吗‌对 99% 的应用来说把整套基础设施收敛到 PostgreSQL是 2026 年最合理的架构选择。能用数据库解决的事情就不要再引入一个新服务。这不仅是技术简化更是思维简化。正如那篇引爆社区的文章所说开发者太常在堆功能而不是解决问题。Redis 是强但大多数时候我们根本用不到它的极限而却要为它付上运维成本、部署复杂度与系统风险。把 Redis 留给真正需要它的 1%其余的——交给 Solid Queue 就够了。‌

相关新闻