当前位置: 首页 > news >正文

Spring Boot + Redis 缓存优化方案,解决 Redis 缓存的三大经典问题

一、整体项目背景与核心目标

这是一套Spring Boot + Redis 缓存优化方案,针对电商 / 本地生活类项目的店铺查询接口,解决 Redis 缓存的三大经典问题:

(1)缓存穿透:非法 ID(如不存在的店铺 ID)频繁请求,打穿缓存直连数据库

(2)缓存击穿:热点 key(热门店铺)突然过期,大量并发请求打穿缓存

(3)缓存雪崩:大量 key 同时过期,数据库压力骤增(通过随机 TTL、逻辑过期规避)

核心实现是封装了一个通用的CacheClient工具类,提供 4 个核心方法,覆盖不同缓存场景的需求。

二、核心工具类CacheClient完整拆解

工具类设计目标
方法编号方法名核心功能解决问题
1set任意对象序列化 JSON,存入 Redis,设置物理过期时间通用缓存写入
2setWithLogicalExpire对象序列化 JSON,包装逻辑过期时间,存入 Redis(无物理过期)缓存击穿(热点 key)
3queryWithPassThrough查询缓存 + 空值缓存,解决缓存穿透缓存穿透(非法 ID)
4queryWithLogicalExpire查询缓存 + 逻辑过期判断 + 异步重建,解决缓存击穿缓存击穿(热点 key)

方法 1:set(通用缓存写入)

public void set(String key, Object value, Long time, TimeUnit unit) { stringRedisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(value), time, unit); }

方法2:setWithLogicalExpire(缓存击穿)

public void setWithLogicalExpire(String key, Object value, Long time, TimeUnit unit) { // 1. 包装逻辑过期时间 RedisData redisData = new RedisData(); redisData.setData(value); redisData.setExpireTime(LocalDateTime.now().plusSeconds(unit.toSeconds(time))); // 2. 写入Redis,不设置物理过期时间(永不过期) stringRedisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(redisData)); }

方法3:queryWithPassThrough (缓存穿透解决方案)

public <R, ID> R queryWithPassThrough( String keyPrefix, ID id, Class<R> type, Function<ID, R> dbFallback, Long time, TimeUnit unit) { // 1. 拼接Redis缓存key String key = keyPrefix + id; // 2. 从Redis查询缓存 String json = stringRedisTemplate.opsForValue().get(key); // 3. 缓存存在且非空,直接反序列化返回 if (StrUtil.isNotBlank(json)) { return JSONUtil.toBean(json, type); } // 4. 缓存命中但为空值(""),说明是非法ID,直接返回null if (json != null) { return null; } // 5. 缓存未命中,
http://www.jsqmd.com/news/619643/

相关文章:

  • 学习dp入门
  • 3步打造轻量Windows 11:tiny11builder精简系统实战指南
  • SGLang实战:如何用Python DSL编写带分支的LLM生成任务(附完整代码)
  • 喔去,litellm 竟然被投毒了,赶紧检查你的机器中招了没有侥
  • 物联网云平台工业设备对接远程控制数据采集视频接入开源可二次开发 该物联网云平台使用 Java ...
  • 如何用OnmyojiAutoScript实现阴阳师全自动托管:每天节省2小时游戏时间的完整指南
  • 互联网企业项目管理的核心挑战
  • 基于MPC的模型预测轨迹跟踪控制联合仿真simulink模型+carsim参数设置 效果如图
  • 短剧付费转化系统设计:试看 + 阶梯定价 + 会员锁客全链路
  • 智慧农业无人机数字孪生系统源码:基于WebGL的3D农场可视化平台
  • 我想在豆包做广告,联系谁?第三方豆包优化方案助您精准获客 - 品牌2026
  • 扔给 AI 自动部署!Wazuh 安全监控平台 - 一键部署提示词
  • 【可信计算】TPM2-tools实战:从文件度量到完整性验证
  • SpringSecurity(3)学习内容
  • fre:ac音频转换器:3大核心功能让你的音乐管理焕然一新
  • 从Vivado工程到上电自启:ZYNQ7020双核ARM+FPGA的完整启动流程详解
  • EC-QA-04-质量问题跟踪表
  • 3分钟掌握G-Helper:终极华硕笔记本性能优化指南
  • 单相全桥逆变器Simulink仿真分析与MATLAB实现探索
  • 智能销售辅助在机械设备行业转化率突破:从经验依赖到AI赋能的革命性转型
  • 基于单片机控制的汽车电动车窗
  • 现在不重构组织,Q3将面临AI人才断层潮:SITS2026圆桌披露的21天敏捷转型启动清单
  • 解密WarcraftHelper:现代系统兼容方案让经典魔兽争霸3重获新生
  • 西门子PLC 1200与V20变频器USS通讯项目:包含实际程序、CAD图纸及详细注释
  • 避开这些坑!Applied Intelligence投稿6中5后,我总结的格式与语言避雷指南(附Decision Letter模板)
  • 高效管理:IP-Guard客户端批量部署的三种核心方案详解
  • 5分钟掌握Win11Debloat:免费清理Windows臃肿系统的终极指南
  • 2026年春招在线笔试系统:如何用三路监考终结AI搜题作弊?
  • 国内GEO优化公司TOP推荐|AI时代,谁能帮你抢占流量话语权? - 品牌测评鉴赏家
  • 如何用Python实现大麦网自动抢票?5步提升成功率90%的完整指南