核心是让高频读请求绕过数据库,关键在于缓存设置、使用方式与兜底策略:本地+分布式组合(Caffeine+Redis)、TTL加随机偏移防雪崩、LFU/LRU按访问模式选淘汰策略、写操作配套“先更库再删缓存”或延迟双删,并防御穿透(空值缓存+布隆过滤器)、击穿(互斥锁)和雪崩(随机过期+降级限流)。

核心是让高频读请求“绕过数据库”,把重复查询拦截在缓存层。关键不在有没有缓存,而在于缓存怎么设、怎么用、怎么兜底。
选对缓存类型:本地 + 分布式组合用
单节点热点数据(比如配置项、字典表)用本地缓存,如 Guava Cache 或 Caffeine,毫秒级响应,零网络开销;跨节点共享的热点数据(比如商品详情、用户主页)必须用 Redis 这类分布式缓存,保证多实例看到一致数据。不要只用一种——本地缓存抗尖峰,Redis 保一致性,两者配合能覆盖绝大多数读场景。
设置合理的过期与淘汰机制
避免所有 key 同一时刻失效引发雪崩,TTL 要加随机偏移(比如基础 30 分钟,再 ±5 分钟);对访问极不均衡的数据(如少数爆款商品),优先用 LFU 淘汰策略;对访问模式有时间局部性的数据(如用户最近浏览列表),LRU 更合适。别依赖“永不过期”,也别设太短(如 10 秒),否则缓存命中率低,等于没用。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
写操作必须配套缓存更新策略
- 读多写少的场景(如商品信息),推荐「先更库,再删缓存」,简单可靠
- 并发写频繁时,用「延迟双删」:删一次缓存 → 更新数据库 → 睡几百毫秒 → 再删一次缓存,降低脏数据窗口
- 强一致性要求高的业务(如账户余额),可考虑 Write-Through 模式,但会牺牲写性能,需权衡
必须防御三大缓存风险
缓存穿透:对查不到的数据也缓存空值(如 `set user:999999 "" EX 2`),并搭配布隆过滤器前置校验非法 ID;缓存击穿:对确定的热点 key(如 `shop:1001`),用 Redis 的 setnx 实现互斥锁,只放一个线程回源加载;缓存雪崩:除了 TTL 随机化,还要配好降级开关——当 Redis 不可用时,自动降级为直连数据库,加限流保护,别让整个服务垮掉。
立即学习“Java免费学习笔记(深入)”;

















