本地缓存
本地缓存用于进程内热点数据加速,常见于字典、配置、权限、轻量级元数据等读取频繁但变化不高的场景。它与 Redis 缓存不同:本地缓存不跨实例共享,重启后会丢失,因此更适合作为读性能优化层,而不是业务事实存储。
与 Redis 缓存的区别
| 维度 | 本地缓存 | Redis 缓存 |
|---|---|---|
| 存储位置 | 当前 JVM 进程 | 独立 Redis 服务 |
| 多实例一致性 | 需要主动失效或短 TTL | 天然共享同一份缓存 |
| 性能 | 最高,少一次网络访问 | 高,但有网络开销 |
| 容量 | 受应用内存限制 | 受 Redis 内存限制 |
| 适用场景 | 小体量热点配置、字典、权限元数据 | 跨实例共享、会话、分布式缓存 |
推荐使用方式
设计建议
- 必须设置容量和过期策略:避免本地缓存无限增长导致 JVM 内存压力。
- 配置变更要失效缓存:字典、权限、配置修改后要考虑发布缓存清理事件。
- 多实例不要依赖强一致:如果多个后端实例同时运行,本地缓存会短时间不一致。
- 只缓存可重建数据:不要把订单状态、余额等关键事实只放本地缓存。
排查清单
| 现象 | 优先检查 |
|---|---|
| 修改配置后不生效 | 本地缓存是否清理;TTL 是否过长;是否多实例某台未刷新 |
| 内存占用高 | 缓存数量、对象大小、是否缺少最大容量限制 |
| 不同实例结果不一致 | 是否依赖本地缓存强一致;是否需要改为 Redis 或广播失效 |
| 缓存击穿 | 热点 Key 过期时并发回源;是否需要互斥或预热 |
