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
相关推荐
blackA_17 分钟前
数据库MySQL学习——day4(更多查询操作与更新数据)
数据库·学习·mysql
极限实验室1 小时前
Easysearch 迁移数据之 Reindex From Remote
数据库
朴拙数科1 小时前
基于LangChain与Neo4j构建企业关系图谱的金融风控实施方案,结合工商数据、供应链记录及舆情数据,实现隐性关联识别与动态风险评估
数据库·langchain·neo4j
小李学不完2 小时前
Oracle--SQL事务操作与管理流程
数据库
qq_441996052 小时前
为何 RAG 向量存储应优先考虑 PostgreSQL + pgvector 而非 MySQL?
数据库·mysql·postgresql
Ivan陈哈哈2 小时前
Redis是单线程的,如何提高多核CPU的利用率?
数据库·redis·缓存
小光学长3 小时前
基于vue框架的电信用户业务管理系统的设计与实现8ly70(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库
程序员不想YY啊3 小时前
MySQL元数据库完全指南:探秘数据背后的数据
数据库·mysql·oracle
数据最前线3 小时前
Doris表设计与分区策略:让海量数据管理更高效
数据库
时光追逐者3 小时前
MongoDB从入门到实战之MongoDB快速入门(附带学习路线图)
数据库·学习·mongodb