缓存与一致性

返回 Redis

架构总览:缓存架构


Cache Aside(旁路缓存)

读:缓存 → miss → DB → 写缓存
写:更新 DB → 删除缓存(推荐)

先删缓存再写库;高并发可 延迟双删

不一致场景原因
乱序删缓存后写库前,另一请求回填旧值
主从延迟写主删缓存,读从旧值再缓存
双写同时写 Redis 与 MySQL

强一致:读主、版本号、Canal 刷缓存,或接受最终一致。

多级缓存

请求 → Caffeine(本地)→ Redis → DB

本地缓存需 失效广播(Pub/Sub / MQ)。


缓存三大问题

穿透

不存在 key 打穿 DB → 空值短 TTL布隆过滤器、接口校验。

击穿

热点 key 过期瞬间并发回源 → 互斥锁、逻辑过期、热点永不过期。

雪崩

大量 key 同时过期或 Redis 不可用 → TTL 抖动、Sentinel/Cluster、Sentinel 降级、预热。


分布式限流

方式说明
固定窗口 INCR边界可能 2× 突发
滑动窗口 Lua更平滑
Redisson RRateLimiter令牌桶
Gateway集中限流

Cluster 下限流 key 固定 slot。


Session / 幂等 / 去重

场景做法
SessionSET session:<id> ... EX
幂等SET idempotent:<key> 1 NX EX
消息去重SET msg:dedup:<id> 1 NX + MQ
序号INCR分布式 ID

接口幂等性


相关