redis缓存击穿、雪崩、穿透

redis缓存击穿

  redis的缓存击穿是指,当redis的某个key值失效后,或者说它的过期时间等于0,此时这个key值的请求会打到数据库上。比如这个key值上的请求有3000个,而数据库mysql只支持2000个,当3000个请求打到mysql上时,mysql就会宕掉。这种情况属于是redis的击穿。
  解决方案:
合理的设置过期时间,比如将热点数据设置为永不过期;或者动态的刷新过期时间。保证存在请求的时候,key值不会失效而导致缓存击穿。

redis缓存雪崩

  redis的缓存雪崩,情况和缓存击穿类似,缓存击穿是指的一个key值失效,而缓存雪崩是指的在redis中有多个key同时失效,而多个key值中的请求全部打到数据库,从而导致数据的性能下降,甚至会宕机。虽然此时的key值的请求会比击穿的key值的请求少很多,但是架不住key值量多。比如每个key值的请求在200个左右,但是出现失效的key值的数量有几十个,此时的请求全部打到数据库,请求数超过了数据库的承受量,数据库也是招架不住的。通常缓存雪崩的原因是因为架构设计漏洞或者业务逻辑有问题造成的,所以在框架的设计阶段要严格把控。
  解决方案:
1.设计集群模式,利用redis的主从机制和redis的哨兵模式,redis的cluster,避免全盘崩溃。
2.本地缓存+hystrix限流和降级,避免数据库被打死。同时设置合理的过期时间。
3.redis的持久化,当系统重启的时候,自动从磁盘加载数据,快速回复缓存数据。

redis缓存穿透

  redis的缓存穿透是指,当一个redis里面不存在的key的请求过来时,因为redis里没有该缓存,所以请求会直接到达数据库。这种情况虽然很少发生,但不排除可能性,比如用户操作不当,或者一些恶意请求等。这种情况相当于绕过了redis缓存,或者说相当于没有设计redis缓存,请求直接到达了数据库,从而导致系统性能下降。
  解决方案:
1.为了体现缓存的价值,可以将查询结果为空值的数据缓存起来,并且设置合理的过期时间,从而减少无效的请求对数据库的操作。
2.收到请求后对请求的参数的严格校验,判断该请求是否合法,从而判断是否放行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值