10. 实战场景
把前面能力落到可口述的业务故事。每条:场景 → Redis 怎么用 → 核心优化 → 边界。
更细的缓存架构推演见:场景实战:缓存设计。
秒杀系统设计还可对照:秒杀系统。
登录 / 会话
- 用法: String / Hash 存 token 或 session;
EXPIRE控制登录态 - 优化: Key 带用户维度;续期滑动过期;敏感信息不落明文
- 边界: 强制下线、多端互踢要有版本号或 token 黑名单
秒杀
- 用法: 库存预扣在 Redis(Lua 判断 + DECR);成功再异步下单
- 优化: 分桶库存打散热 Key;接口限流;缓存与 DB 对账
- 边界: 支付与订单以 DB 为准;Redis 防超卖,不是账务系统
点赞 / 计数
- 用法:
INCR计总数;Set 记「谁点过」防重复 - 优化: 计数与明细分离;高峰异步落库
- 边界: 计数可最终一致;审计明细需要持久化
排行榜
- 用法: ZSet,score 为热度/分数;
ZREVRANGE取 TopN - 优化: 定时快照;超大榜分页与裁剪;防刷分
- 边界: 实时榜与日榜/周榜可用不同 Key
分布式锁
- 用法: 互斥更新、防重复提交、定时任务多实例
- 优化: Redisson + 看门狗;解锁校验持有者;业务可重入要明确
- 边界: 锁粒度尽量细;锁内禁止超长远程调用
详见:分布式锁
接口限流
- 用法: Redis 计数器 / 滑动窗口;网关 + 业务双层
- 优化: Key 设计含接口与主体;过期防泄漏;返回明确错误码
- 边界: 全局限流与用户级限流分开
详见:并发:限流
缓存架构
text
客户端
→(可选)Nginx / 本地短缓存
→ 应用 Caffeine(热点)
→ Redis
→ MySQL- 优化: Cache Aside(先更新 DB 再删缓存);过期随机;空值防穿透;热点本地挡
- 一致性: 普通业务删缓存即可;强一致需求上 Binlog 监听或短时双删
口述总模板
我们用 Redis 做缓存和分布式协调。读路径多级缓存防击穿雪崩;写路径更新 DB 后删缓存。库存和限流用 Lua 保证原子。锁用 Redisson 续期。大 Key / 热 Key 会拆分或加本地缓存。持久化与主从按环境配置,集群在需要水平扩展时再上。
自测:每个场景能不看稿讲 30~60 秒,并回答一个追问(一致性 / 超卖 / 锁超时)。