凌晨三点,我被电话惊醒:
“苏工!首页崩了!”监控显示:缓存命中率0%,数据库QPS 10万+,线程阻塞2000+。
根本原因竟是同事没加缓存!
不会用缓存的程序员,就像不会刹车的赛车手——今天这10条军规,能救你的系统!
💥 10条缓存黄金军规(血泪总结)
1️⃣ 避免大Key:别把缓存当垃圾桶!
- 反例:缓存整个用户对象(含订单记录等),引发内存碎片和Full GC。
- 正解:拆!基础信息(
user_base
)和扩展信息(user_detail
)分开缓存。
@Cacheable(value = "user_base", key = "#id") // 只存核心字段
public UserBase getBaseInfo(Long id){
...}
2️⃣ 永远设置过期时间!
- 血案:配置信息永不过期,修改后3天才生效。
- 公式:
最优TTL = 平均数据变更周期 × 0.3
- 技巧:基础TTL+随机抖动(如30分钟+随机5分钟),防集中失效!
3️⃣ 批量失效=自爆!
- 事故:所有缓存同时间失效,数据库瞬间被打穿。
- 方案:TTL增加随机值,让缓存均匀过期:
public long randomTtl(long baseTtl){