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

redis常见问题及解决方案

1. 缓存穿透

问题

大量请求不存在的数据(如 id=-1、非法 id),缓存查不到,直接打穿到数据库,导致 DB 压力巨大甚至宕机。

解决方案

  1. 缓存空值查询 DB 无结果时,缓存null或空对象,并设置短过期时间(如 30s)。
  2. 布隆过滤器(Bloom Filter)提前把存在的 key 存入布隆过滤器,请求先过过滤器,不存在直接返回,不查缓存和 DB。
  3. 接口层参数校验 + 限流拦截非法参数,防止恶意攻击。

2. 缓存击穿

问题

某个热点 key 过期瞬间,大量并发请求同时打到数据库。特点:单个 key 热点 + 过期

解决方案

  1. 互斥锁(分布式锁)缓存不存在时,用SETNX加锁,只允许一个线程去 DB 加载数据并更新缓存。
  2. 热点 key 永不过期逻辑过期:缓存中存过期时间,后台异步刷新,不直接删除 key。
  3. 随机过期时间避免同一时间大量 key 集中失效。

3. 缓存雪崩

问题

大量 key 同一时间集体过期或 Redis 宕机,所有请求直接涌入数据库,DB 被压垮。

解决方案

  1. 过期时间加随机值3600 + random(600),避免集中失效。
  2. 多级缓存Caffeine 本地缓存 + Redis 分布式缓存。
  3. Redis 高可用主从 + 哨兵 / Redis Cluster,避免单点故障。
  4. 服务降级、熔断、限流Redis 不可用时直接返回默认值,不查 DB。
  5. 互斥锁 + 预热提前加载热点数据,避免集中重建。

4. 缓存与数据库双写不一致

问题

更新 DB 与更新缓存顺序不当,导致脏数据、数据不一致。

解决方案

方案一:删除缓存,而不是更新缓存

  • 写请求:先更新数据库,再删除缓存
  • 读请求:命中缓存直接返回,未命中查 DB 并回填缓存

方案二:延迟双删

  1. 先删缓存
  2. 更新 DB
  3. 延迟几百 ms 再删缓存减少并发读写导致的短暂不一致。

方案三:最终一致性(可靠方案)

  • 监听 binlog(Canal)异步更新缓存
  • MQ 异步更新,保证最终一致

5. 缓存污染 / 大 key 问题

问题

  • 存入超大 value(几 MB 甚至几十 MB)
  • 网络 IO 阻塞、Redis 单线程卡顿、内存暴涨

解决方案

  1. 拆分大 key把大 hash/list 拆成多个小 key。
  2. 控制 value 大小避免存大文本、大图片。
  3. 定期清理冷数据设置合理过期,使用 LRU 淘汰策略。
  4. 使用压缩对大文本 gzip 压缩后存储。

6. 缓存并发竞争

问题

多个客户端同时修改同一个 key,导致执行顺序错乱。

解决方案

  1. 分布式锁(Redlock / Redisson)
  2. 使用Redis 事务 + watch
  3. 利用单线程特性,用 Lua 脚本保证原子性。

7. 缓存预热

问题

系统刚启动,缓存为空,流量直接打 DB。

解决方案

  • 项目启动时异步加载热点数据
  • 定时任务预热
  • 手动触发缓存刷新

8. 缓存污染(冷数据占满内存)

问题

大量不常用数据进入缓存,挤掉热点数据。

解决方案

  • 设置maxmemory-policy allkeys-lfu / allkeys-lru
  • 业务层过滤低频访问数据,不放入缓存

快速记忆版(面试背诵)

  1. 穿透:不存在数据查 DB → 缓存空值、布隆过滤器
  2. 击穿:热点 key 过期 → 互斥锁、永不过期
  3. 雪崩:大量 key 同时过期 / 宕机 → 随机过期、集群、降级限流
  4. 不一致:双写顺序问题 → 先更 DB 再删缓存、异步更新
  5. 大 key→ 拆分、压缩、清理
  6. 并发竞争→ 分布式锁、Lua 脚本
http://www.cnnetsun.cn/news/1381503.html

相关文章:

  • 3大核心价值:OpenSpeedy用户态Hook技术解析与实战指南
  • 好写作AI博士论文结论与展望:AI如何帮你提炼升华
  • 好写作AI博士论文初稿的逻辑校验与结构优化:从自洽到严谨
  • 从气象数据到可视化:手把手教你用等值线算法绘制降雨量分布图
  • 使用python里的OpenCV包做简单的车道线检测
  • git学习目录
  • 游戏开发者必看:Bullet引擎布料仿真实战(附PBD算法源码解析)
  • Phi-3-Mini-128K本地化部署详解:使用Ollama管理模型服务
  • Speech Seaco Paraformer系统信息查看:监控你的ASR模型运行状态
  • 达梦DCA认证必看:主从同步参数优化全解析(含MAL心跳间隔/归档空间实战调优)
  • GICI —编译运行glog报错
  • YOLO12教学演示实战:置信度滑块对漏检/误检影响的直观对比分析
  • 夯实管理基石:企业档案规范化管理实施指南
  • 万字拆解Infoseek舆情监测系统:基于大模型+多模态的分布式舆情中台架构实践
  • 从零开始学FOFA:手把手教你用搜索引擎语法发现网络漏洞
  • 学术论文写作助手:集成百川2-13B与LaTeX的智能撰写与润色方案
  • 74HC138与74HC151的奇妙组合:如何用它们设计全加器?
  • 锐捷交换机ZAM功能实测手记:当不支持Python的设备遇到ZTP会发生什么?
  • OBS多平台直播终极指南:obs-multi-rtmp插件完整教程与实战应用
  • 别再乱用饼图了!ECharts高级配色方案与业务场景匹配指南
  • Linux 命令精讲:csplit 按内容智能分割文件详解
  • 大疆 Osmo 360 深度评测:双 1 英寸传感器如何重塑 8K 全景拍摄体验?
  • 基于Transformer架构的FUTURE POLICE模型:原理详解与调优实践
  • Qwen-Image零基础上手:RTX4090D用户首次体验Qwen-VL图文对话的详细步骤
  • 旋转图像特征点匹配
  • 3步完成Mac系统升级:OpenCore Legacy Patcher终极指南
  • H3C 双线路 NQA 联动配置实战:智能切换与故障恢复
  • SMUDebugTool实战指南:掌握AMD Ryzen平台硬件调试与性能优化
  • 全志A40I Android7.1开机自启动避坑指南:从内核修改到广播接收全流程
  • 智能设备管理系统:从架构设计到高效运维实战