Spring Boot 实用小技巧:多级缓存(Caffeine + Redis)- 第545篇
悟纤文章(文章累计540+)
《国内最全的Spring Boot系列之一》
《国内最全的Spring Boot系列之二》
《国内最全的Spring Boot系列之三》
《国内最全的Spring Boot系列之四》
《国内最全的Spring Boot系列之五》
《国内最全的Spring Boot系列之六》
《国内最全的Spring Boot系列之七》
《国内最全的Spring Boot系列之八》
Docker中部署SpringBoot项目,超详细教程 - 第540篇
IDEA:别再用 StringBuilder 拼命了,用 + 吧 - 第541篇
实战派 Spring Boot:7个你一定用得上的技巧 - 第542篇
你以为你会写测试?Spring Boot 还藏了这些招!—让你的Spring Boot 测试不再只是“点个运行” - 第543篇
当生产环境卡成 PPT:Spring Boot 线程 Dump 捉妖指南 - 第544篇
学 Spring Boot,就找悟纤!
为什么要整多级缓存?
先问大家一个问题:
如果你有个土豪朋友(Redis),存了海量的数据,但是每次找他借钱(查缓存),都要打车去他家(网络 IO)——你受得了吗?
所以,聪明的办法是:你自己家(Caffeine 本地内存)也藏点私房钱(热点数据)。
这样想买奶茶就不用总跑去找土豪了。
👉本地(Caffeine) = 速度快
👉分布式(Redis) = 数据全
二者合体 =天下无敌,缓存双保险。
实现步骤
1. 养一只本地仓鼠(Caffeine)
仓鼠的特点就是:存点东西在嘴里,随取随用,但存不下太多。
@Bean
public Cache<String, Object> caffeineCache() {
return Caffeine.newBuilder()
.expireAfterWrite(5, TimeUnit.MINUTES) // 5分钟后,仓鼠忘记藏在哪了
.maximumSize(10000) // 最多存10000个花生
.build();
}
2. 搞个远房土豪亲戚(Redis)
Redis 就是“远方的超级仓库”,虽然东西多,但去一趟要点时间。
Spring Boot 已经给你封装好了 StringRedisTemplate,直接用就行。
3. 联合经营(Caffeine + Redis)
写个多级缓存 Service,就像开个“夫妻店”:
public Object get(String key, Supplier<Object> dbLoader) {
// 1. 先问仓鼠
Object value = caffeineCache.getIfPresent(key);
if (value != null) return value;
// 2. 再问远房土豪
value = redisTemplate.opsForValue().get(key);
if (value != null) {
caffeineCache.put(key, value); // 顺手喂一口仓鼠
return value;
}
// 3. 最后没办法,只能自己干(查数据库)
value = dbLoader.get();
if (value != null) {
redisTemplate.opsForValue().set(key, value.toString(), 10, TimeUnit.MINUTES);
caffeineCache.put(key, value);
}
return value;
}
这样一来:
l 热点数据:直接仓鼠嘴里掏,快到飞起⚡
l 冷门数据:去远房土豪家拿,再顺便塞给仓鼠,下次更快。
l实在没有:自己种地(查数据库)。
4.更新数据的时候
仓鼠和土豪的记忆力都很差,你得提醒他们 “忘掉旧的”:
public void updateUser(User user) {
userRepository.save(user); // 更新数据库
cacheService.evict("user:" + user.getId()); // 叫仓鼠和土豪都忘了
}
如果是分布式多节点,还可以让土豪(Redis)用 广播功能,大声喊一句:
l “兄弟们!旧数据别留了!”
l所有仓鼠就会集体清空对应缓存,保持一致。
使用效果
l 99%热门数据 → 仓鼠秒取
l 剩下的 1% → 远房土豪 Redis 出手
l数据全局一致,还省了一大堆 Redis QPS
注意事项
l 仓鼠(Caffeine)记性不好,要设好过期时间和数量,不然会撑爆内存。
l 土豪(Redis)偶尔会忘记,可以加随机过期时间,避免集体“失忆雪崩”。
l更新时别想着“改缓存”,直接删掉就好,避免脏数据。
总结
多级缓存就像:
l 仓鼠负责速度,
l 土豪负责存量,
l 数据库是兜底。
这仨一组合,你的接口就能像点奶茶一样丝滑:
“Caffeine 秒回 → Redis 接力 → DB 补刀”。
如果你觉得这篇文章有用,欢迎点赞、分享、转发、投喂瓜子🌰~
学Spring Boot,就找悟纤! 咱们下期见!
历史文章(文章累计530+)
《国内最全的Spring Boot系列之一》
《国内最全的Spring Boot系列之二》
《国内最全的Spring Boot系列之三》
《国内最全的Spring Boot系列之四》
《国内最全的Spring Boot系列之五》
《国内最全的Spring Boot系列之六》
《国内最全的Spring Boot系列之七》
《国内最全的Spring Boot系列之八》
Spring Boot实用小技巧11 - 第533篇
Viggle Api上线V3-beta模型,圣诞节跳舞视频来临
Suno Api V4 - Suno Api系列教程,耗费1个星期,输出14篇文章
Viggle AI开放照片唱歌API,新年快乐唱起来
Docker入门篇[SpringBoot之Docker实战系列] - 第534篇
Docker 的安装和基本使用[SpringBoot之Docker实战系列] - 第535篇
国内最全的Spring Boot系列之八 —— 汇聚8年500多篇文章,值得收藏
Docker 基本概念[SpringBoot之Docker实战系列] - 第536篇
Docker 使用镜像[SpringBoot之Docker实战系列] - 第537篇
Docker 操作容器[SpringBoot之Docker实战系列] - 第538篇
Docker 仓库/私有仓库[SpringBoot之Docker实战系列] - 第539篇
Docker中部署SpringBoot项目,超详细教程 - 第540篇
IDEA:别再用 StringBuilder 拼命了,用 + 吧 - 第541篇
实战派 Spring Boot:7个你一定用得上的技巧 - 第542篇
你以为你会写测试?Spring Boot 还藏了这些招!—让你的Spring Boot 测试不再只是“点个运行” - 第543篇
当生产环境卡成 PPT:Spring Boot 线程 Dump 捉妖指南 - 第544篇