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
相关推荐
愉悦的麻婆豆腐10 分钟前
Neo4j使用neo4j-admin导入csv数据方法
数据库·neo4j
Villiam_AY25 分钟前
goredis常见基础命令
redis·golang
iVictor1 小时前
Redis 大 Key 分析利器:支持 TOP N、批量分析与从节点优先
redis
夜泉_ly3 小时前
MySQL -安装与初识
数据库·mysql
qq_529835354 小时前
对计算机中缓存的理解和使用Redis作为缓存
数据库·redis·缓存
月光水岸New6 小时前
Ubuntu 中建的mysql数据库使用Navicat for MySQL连接不上
数据库·mysql·ubuntu
狄加山6756 小时前
数据库基础1
数据库
我爱松子鱼7 小时前
mysql之规则优化器RBO
数据库·mysql
chengooooooo7 小时前
苍穹外卖day8 地址上传 用户下单 订单支付
java·服务器·数据库
Rverdoser8 小时前
【SQL】多表查询案例
数据库·sql