缓存雪崩&缓存穿透&缓存击穿

缓存雪崩&缓存穿透

什么是缓存雪崩现象?

比如在同一时刻有5000个请求来访问的我们的系统,请求先是到达缓存,缓存中没有,然后就去数据库中找,数据库中找到之后就把结果放入缓存中,下一次请求就直接走缓存中拿,但是一旦缓存宕机,此时如果没有特别的方案来处理的话,请求就直接到达数据库,数据库一下就来了5000个请求,导致数据库崩掉,这就是缓存雪崩。

缓存雪崩的处理方案?

事前:保证redis集群进行高可用。主从+哨兵,redis cluster。

事中:hystrix限流&降级+系统内部ehcache缓存,避免dba崩溃,

请求流程:用户发起请求,先到达本地ehcache缓存,ehcache中没有就到redis中找,redis中没有就到数据库中查,然后将查到的结果写入ehcache和redis中,,就算redis宕机,也还有ehcache可以抵挡一下,但是ehcache能力是有限的,所以需要加上hystrix限流&降级,一部分请求走ehcache, 没有就走,hystrix限流组件,保证数据库不会崩溃,

事后:redis持久化,快速恢复缓存数据

 

缓存穿透现象?

想象一下这个情况,如果传入的参数为-1,会是怎么样?这个-1,就是一定不存在的对象。就会每次都去查询数据库,而每次查询都是空,每次又都不会进行缓存。假如有恶意攻击,就可以利用这个漏洞,对数据库造成压力,甚至压垮数据库。即便是采用UUID,也是很容易找到一个不存在的KEY,进行攻击。

缓存穿透的解决方案?

可以会采用缓存空值的方式,就是说如果从数据库查询的对象为空,也放入缓存,只是设定的缓存过期时间较短,比如设置为60秒。

缓存击穿现象?

缓存击穿,是指缓存中一个key非常热点,在不停的扛着大并发,大并发集中对这一个点进行访问,当这个key在失效的瞬间,持续的大并发就穿破缓存,直接请求数据库,就像在一个屏障上凿开了一个洞。、

处理方案

比如在电商系统中,对访问量非常高的商品,让缓存永不过期。即便某些商品自己发酵成了爆款,也是直接设为永不过期就好了

 

 

 

 

 

 

猜你喜欢

转载自www.cnblogs.com/kt-ting/p/12378630.html