redis篇

1.redis雪崩,穿透,击穿

  • 缓存雪崩:假设每天高峰请求量每秒1000个请求,本来缓存能够承受每秒800个请求,但是缓存出现了宕机,缓存挂掉了,此时每秒1000个请求全部落在数据库上,它肯定扛不住,他会报一下警,然后挂掉,如果没有采用什么特别的方案处理这个故障,DBA(数据管理员)很着急,重启数据库,但是数据库立马又被新的流量打死,这就是雪崩

总结:短时间内大量的请求,超出缓存能够承受的范围,缓存宕机,大量请求直接访问数据库,造成数据库挂掉,就是雪崩

缓存雪崩的事前事中事后的解决方案如下。

  • 事前:redis 高可用,主从+哨兵,redis cluster,避免全盘崩溃。(知识点,本人还未用过
  • 事中:本地 ehcache 缓存 + hystrix 限流&降级,避免 MySQL 被打死。(知识点,本人还未用过
  • 事后:redis 持久化,一旦重启,自动从磁盘上加载数据,快速恢复缓存数据。(知识点,本人还未用过

 

  • 缓存穿透:假设短时间内有2000个请求,但是其中却又1800个都是恶意请求,无用的请求,那么对于这1800个请求,缓存中并查不到,这个时候就要取数据库查询,但是在数据库查询也是查询不到,这样的话,缓存对于它来说视为摆设,无用,但是这些短时间内大量的请求会打死数据库,这就是穿透。

总结:短时间内大量的请求,但请求内容在缓存中没有,这些大量请求就会直接到数据库查询,导致数据库死机,就是穿透

解决方案:

  • 只要在数据库没有查到,这个时候就在缓存中存入一个空值,设置一个过期时间,这样的话,下次再有相同的key来请求,在缓存失效之前都会访问缓存取数据

 

  • 缓存击穿:就是说某个 key 非常热点,访问非常频繁,处于集中式高并发访问的情况,当这个 key 在失效的瞬间,大量的请求就击穿了缓存,直接请求数据库,就像是在一道屏障上凿开了一个洞。

解决方式:

  • 可以将热点数据设置为永远不过期;或者基于 redis or zookeeper 实现互斥锁,等待第一个请求构建完缓存之后,再释放锁,进而其它请求才能通过该 key 访问数据。

 

redis分布式锁:---(待更新)

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值