Redis缓存穿透、缓存雪崩、缓存缓存击穿

1.缓存穿透

概念

大量请求访问没有缓存的key,指查询一个一定不存在的数据,由于缓存不命中,请求会穿透到数据库,导致数据库压力过大。

原因及解决办法

1.恶意攻击

解决办法:

  • 对于少量请求的IP,限制其访问次数或者拉入黑名单;
  • 程序去检查key的合法性,对于不合法的key,做过滤处理;
  • 布隆过滤器

2.业务刚上线

解决办法:

  • 预热Redis;
  • 在最前端流量控制,逐步把请求释放出来;
  • 设置空值key

2.缓存雪崩

概念

指大量的key在同一时间失效,导致请求全部落到数据库上,压力过大,进而影响到上下文的应用服务。缓存雪崩的原因可能是缓存服务器宕机、缓存设置了相同的过期时间等。解决办法可以采用分布式锁、异步加载缓存等方式,避免大量的key同时失效。

原因及解决办法

1.Redis故障

Redis缓存服务器宕机。

解决办法:

  • 使用主从复制,提高可靠性;
  • 故障时,采取服务降级、熔断、限流等措施

2.大量的key设置了相同的过期时间

解决办法:

  • 将过期时间打散,加上随机值,尽量让缓存均匀过期;

3.缓存击穿

概念

指一个key非常热点,在不停的扛着大并发,当这个key在失效的瞬间,持续的大并发就穿破缓存直接请求数据库,导致数据库压力过大。缓存击穿的原因可能是热点数据没有被正确预热、缓存设置了较短的过期时间等。解决办法可以采用预加载、设置永久缓存等方式,避免热点数据失效。同时可以考虑使用互斥锁避免并发问题。

原因及解决办法

1.热点key设置了太短的过期时间

解决办法:

  • 热点key设置较长的过期时间,对于非常重要的key,可以设置永久有效,但是要从业务角度考虑维护数据一致性;
  • 使用分布式锁,如果key失效了,只保证一个请求访问数据库,然后更新key
相关推荐
jaysee-sjc6 分钟前
【苍穹外卖】Day01:从零认识企业级项目开发
java·开发语言·数据库·mysql·spring·intellij-idea·mybatis
智购科技自动贩卖机6 分钟前
自动售货机嵌入式系统时钟同步与时间管理实战:从RTC校准到断网时间保持的工程实践
大数据·linux·数据库·人工智能·yolo
Y3815326627 分钟前
SEO 周报自动化:从采集数据到一页报告
数据库·搜索引擎
雨辰AI8 分钟前
多租户数据库资源配额管控|避免租户资源抢占雪崩(金仓 / 达梦 / 高斯 /openGauss 全库原生适配)
java·大数据·数据库·后端
念何架构之路24 分钟前
beego ORM 源码(下):SQL 生成与方言
数据库·sql·beego
程序猿乐锅44 分钟前
【黑马点评 | 第二篇】Redis 缓存更新策略与商铺缓存实现
java·网络·redis·spring·mybatis
livemetee1 小时前
MySQL联合唯一索引(code,deleted)与逻辑删除问题
java·数据库
Doris__HE1 小时前
【元脑服务器NF8480G7-NF8480M7技术规格分享】
运维·服务器·数据库·缓存·性能优化
MacroZheng1 小时前
Redis官方发布高颜值可视化工具,功能更是强的离谱!
java·redis·后端
实心儿儿1 小时前
MySQL — 库的操作
数据库·mysql·oracle