什么是缓存雪崩现象?
缓存雪崩的处理方案?
事前:保证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在失效的瞬间,持续的大并发就穿破缓存,直接请求数据库,就像在一个屏障上凿开了一个洞。、
处理方案
比如在电商系统中,对访问量非常高的商品,让缓存永不过期。即便某些商品自己发酵成了爆款,也是直接设为永不过期就好了