Redis、队列与缓存:不买新机器也能让网站快 10 倍

「换台更大的服务器」——慢站点最常见的处方。有时对,但在 NineLab 接触的大多数项目里,瓶颈不在 CPU,而在架构:每个请求都重新从数据库拉相同数据,重活还在 HTTP 里同步跑,用户盯着 spinner。
缓存(Redis)、消息队列和 CDN 是三个能在不线性涨主机账单的情况下成倍提速的工具。下文用业务语言解释原理与 realistic 数字。
症状:站点「卡」,服务器才 40% 负载
典型电商或 B2B 门户:
- catalog 几万 SKU,筛选排序复杂;
- 单商品页经 ORM 串 6–12 条 SQL;
- 150–300 并发时响应从 1.2 秒爬到 6–9 秒;
- 市场一投流——「突然」全挂(618、双 11 前尤其常见)。
此时 VPS CPU 可能远未到 100%。瓶颈在数据库与请求路径上的阻塞操作。加机器有缓冲,不治本。
缓存:别对同一结果每秒算一千遍
Redis(或 Memcached、KeyDB)是应用与 PostgreSQL/MySQL 之间的快内存。重查询结果按 key 存;后续成千上万用户毫秒级命中。
优先缓存什么
- 列表页与 catalog—— TTL 5–15 分钟,改商品时失效。
- 商品详情——按 SKU 分 key;大促 selective 刷新。
- 字典数据——类目、品牌、筛选项、地区—— TTL 1 小时到 1 天。
- 聚合块——「热销榜」、首页模块(若 JOIN 很重)。
生产里好用的策略
- Cache-aside: 先读 Redis,miss 再查库并回填。
- 事件失效: 改价即删
product:{id}及相关列表 key。 - 防击穿(cache stampede): key 过期时加锁,避免千请求同时打穿 DB。
头号失误: 只缓存不失效。客户看到旧价——比慢页更伤。
队列:别在点击瞬间做完所有事
若下单 handler 里同步发邮件、调 ERP、生成 PDF、写分析——用户等待的是延迟之和。
队列(RabbitMQ、Redis Streams、阿里云 MNS、Kafka 在大流量)把「给用户答复」和「后台干活」分开:
- API 收单、入队、200–400 ms 返回 OK。
- Worker 异步发信、同步 CRM、更新库存。
典型入队任务:邮件/短信、webhook、导出、推荐重算、Excel 导入、报表生成。
CDN:不该回源的东西别回源
商品图、CSS、JS、字体——静态资源应从离用户更近的边缘节点出。Origin 在华东、用户在西北/华南,First Contentful Paint 可差数秒。
CDN 不替代 API 缓存,但减 origin 压力,后端再重也能「感觉更快」。
真实项目「前 / 后」数字
电商单体 PHP/Laravel,catalog ~18,000 SKU,单机 VPS、无水平扩展。
| 指标 | 前 | 后 |
|---|---|---|
| DB 请求(峰值 /s) | ~180 | ~12 |
| API p95 延迟 | 2.9 秒 | 0.21 秒 |
| 退化前并发用户 | ~220 | ~1,300 |
| 主机账单 | 不变 | 不变 |
* 同 VPS 上 Redis + 队列,静态走 CDN,重 SQL 加索引
热页「体感速度」约 10×。移动端转化一月涨 11%——仅仅因为 catalog 不再「想五秒」。
缓存和队列也救不了的情况
- 没索引——缓存 masking,miss 仍打穿 DB。
- ORM N+1——先 profiling,再缓存。
- 关键路径同步调外部系统——必须队列化。
- 峰值超过单机物理上限——要水平扩展,不只 Redis。
优化是诊断,不是「上了 Redis 就完事」。
2–3 周落地计划
第 1 周 — 测量
- APM 或 slow query log:Top-10 最贵 endpoint
- 「现状」压测——记下 p95 与崩溃点
第 2 周 — 快赢
- catalog/详情缓存 + 失效策略
- 邮件与重集成进队列
- 静态上 CDN
第 3 周 — 验证
- 复测压测
- 指标:cache hit rate、队列深度、p95
- 给业务的 before/after 一页纸
给老板的 ROI
典型项目 Redis + 队列 + CDN 一次性 数十万元 量级,加维护。把服务器「规格翻倍」是 每月多几千到上万元,且不保证根因消失。
慢站吃掉移动端 15–20% 转化时,优化常在 1–2 个月 回本——快于又一轮 UI 改版。
要点
加速不总是买硬件,而是别在每次点击里做多余工作。Redis、队列、CDN 是把压力从 DB 挪到内存和后台的成熟组合。
NineLab 做性能审计,在你们真实指标上找瓶颈,并按真实流量落地缓存——前后都做压测。联系我们。
主题常见问题
流量形态与数据往往与生产不一致。需要场景、与线上一致的指标,以及可回滚的逐步加压。
常见瓶颈在数据库与执行计划、连接池、同步外部调用与队列——可作为快速排查清单。
不一定:失效、冷启动与热点键可能适得其反。缓存要按读模型与 SLO 设计。
垂直扩展与查询优化触顶,且数据增长在分片键上可预期时。