讲师中心 微信公众号
AI工具推荐 视频效率加速

如何在Spring Boot中结合Caffeine和Redis实现两级缓存

夜晨吖_7063

夜晨吖_7063

发布时间:2026-09-19 08:12:37

|

577人浏览过

|

来源于php中文网

原创

结论:不能直接用@Cacheable实现两级缓存,因其仅绑定单个CacheManager,无法自动降级;必须手写DoubleCache显式控制“本地→Redis→DB”回源流程,并错开TTL、统一JSON序列化保障一致性。

如何在spring boot中结合caffeine和redis实现两级缓存

直接上结论:两级缓存不是“加了就快”,而是必须让 Caffeine 拦住 80% 以上热点请求,同时用 Redis 承担跨实例共享和兜底职责——否则反而增加复杂度、引入一致性风险。

为什么不能直接用 @Cacheable 套两层?

Spring 的 @Cacheable 默认只绑定一个 CacheManager,强行配置两个(比如 CaffeineCacheManagerRedisCacheManager)会导致注解无法自动选择层级,最终要么全走本地、要么全走 Redis,失去“两级”意义。

  • 常见错误现象:Cacheable 方法命中后返回 null 或 ClassCastException,本质是序列化不匹配(Caffeine 存对象,Redis 存 JSON 字符串)
  • 真实使用场景:需要显式控制访问路径,比如商品详情页的 getProduct(Long id) 方法,必须先查本地、再查 Redis、最后查 DB
  • 正确做法:放弃全自动注解,改用 caffeineCache.get(key, loader) + 手动调用 redisTemplate.opsForValue().get() 组合

如何配置 Caffeine 和 Redis 的序列化保持兼容?

这是最隐蔽也最容易线上翻车的一环:Caffeine 缓存的是原始 Java 对象,而 Redis 默认用 JdkSerializationRedisSerializer 存二进制,一旦类结构微调或部署环境类加载器不同,就会在反序列化时抛 ClassNotFoundExceptionInvalidClassException

Redis Skill - 高性能缓存管理
Redis Skill - 高性能缓存管理

Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。

下载
  • 推荐方案:Caffeine 层保持 Java 原生(零开销),Redis 层统一用 GenericJackson2JsonRedisSerializer
  • 关键配置点:redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer()),且确保实体类有无参构造、字段可 public 或带 getter/setter
  • 性能影响:JSON 序列化比 JDK 序列化慢约 15%,但换来的是可读性、跨语言兼容性和上线稳定性
  • 容易踩的坑:没配 setHashKeySerializersetHashValueSerializer,导致 Hash 结构操作失败;或者误用 StringRedisTemplate 处理对象

过期时间怎么设才不互相打架?

本地缓存过期太短,频繁穿透到 Redis;过期太长,又导致数据陈旧。两级缓存的 TTL 必须错开,且遵循“L1

  • 典型参数组合:CaffeineexpireAfterWrite(2, TimeUnit.MINUTES)RedisSETEX key 300 value(5 分钟)
  • 为什么不是倍数关系?因为要预留“缓存失效窗口”:当 Caffeine 过期瞬间,多个线程可能同时触发回源,此时 Redis 若也刚好过期,就会集体打穿 DB(即缓存雪崩)
  • 进阶技巧:对超高频数据(如首页 Banner),Caffeine 可设 refreshAfterWrite(30, TimeUnit.SECONDS) 实现异步刷新,避免阻塞请求
  • 注意点:Redis 的过期是服务端行为,Caffeine 的过期是客户端行为,两者无法强同步,只能靠时间差+业务容忍度来平衡

缓存更新和删除时,两级怎么协同?

写操作永远比读操作危险。很多团队只做“查询双写”,却忽略“更新/删除”时的缓存清理逻辑,结果出现“Redis 删了,Caffeine 还留着”的脏数据。

  • 安全模式:所有写操作(update/delete)必须显式调用 caffeineCache.invalidate(key) + redisTemplate.delete(key)
  • 不要依赖“被动过期”:Caffeine 的 expireAfterAccess 在低频访问下会让脏数据驻留很久;Redis 的过期也无法覆盖所有更新场景
  • 分布式锁不是银弹:如果用 Redis 分布式锁保证删除顺序,会拖慢写性能;更轻量的做法是加一层“缓存版本号”,读时校验,写时递增
  • 最容易被忽略的地方:批量操作(如 deleteByIds(List<Long>))必须遍历每个 key 清理两级缓存,不能只删 Redis 后就认为完事

真正难的从来不是把 Caffeine 和 Redis 接在一起,而是让它们在高并发、多实例、频繁变更的业务里,既快又准地协作——这要求你对每一处 getputinvalidate 调用都清楚它在什么条件下生效、在什么路径下失效、以及失效后谁来兜底。

热门AI工具

更多
Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

相关专题

更多
spring框架介绍
spring框架介绍

本专题整合了spring框架相关内容,想了解更多详细内容,请阅读专题下面的文章。

2071

2025.08.06

Java Spring Security 与认证授权
Java Spring Security 与认证授权

本专题系统讲解 Java Spring Security 框架在认证与授权中的应用,涵盖用户身份验证、权限控制、JWT与OAuth2实现、跨站请求伪造(CSRF)防护、会话管理与安全漏洞防范。通过实际项目案例,帮助学习者掌握如何 使用 Spring Security 实现高安全性认证与授权机制,提升 Web 应用的安全性与用户数据保护。

377

2026.01.26

常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

3949

2023.11.02

内存数据库有哪些
内存数据库有哪些

内存数据库有Redis、Memcached、Apache Ignite、VoltDB、TimesTen、H2 Database、Aerospike、Oracle TimesTen In-Memory Database、SAP HANA和ache Cassandra。更多关于内存数据库相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

3435

2023.11.14

mongodb和redis哪个读取速度快
mongodb和redis哪个读取速度快

redis 的读取速度比 mongodb 更快。原因包括:1. redis 使用简单的键值存储,而 mongodb 存储 json 格式的数据,需要解析和反序列化。2. redis 使用哈希表快速查找数据,而 mongodb 使用 b-tree 索引。因此,redis 在需要高性能读取操作的应用程序中是一个更好的选择。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

6072

2024.04.02

redis怎么做缓存服务器
redis怎么做缓存服务器

redis 作为缓存服务器的答案:redis 是一款开源、高性能、分布式的键值存储,可作为缓存服务器使用。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

583

2024.04.07

redis怎么解决数据一致性
redis怎么解决数据一致性

redis 提供了两种一致性模型,以维护副本数据一致性:强一致性 (sync) 确保写操作仅在复制到所有从节点后才完成;最终一致性 (async) 则在主节点上写操作后认为已完成,牺牲一致性换取性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

696

2024.04.07

mysql和redis怎么保证双写一致性
mysql和redis怎么保证双写一致性

确保 mysql 和 redis 双写一致性的技术包括:1、事务性更新:同时更新 mysql 和 redis,保证一致性;2、主从复制:mysql 主服务器更改同步到 redis 从服务器;3、基于事件的更新:mysql 记录更改并发送到 redis等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

5422

2024.04.07

AI视频生成软件推荐
AI视频生成软件推荐

本专题汇总了当前主流的AI视频生成软件推荐与排行榜单,涵盖seko、AniShort、剧云、Lovart、LiblibAI及立刻mv等热门工具。同时整理了各软件在文生视频、图生视频、时长限制、画质表现及免费额度等方面的差异对比,助您快速选对适合创作需求的AI视频生成工具。

120

2026.09.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
phpEnv手册
phpEnv手册

共0课时 | 0人学习

进程与SOCKET
进程与SOCKET

共6课时 | 0.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn