雪崩:
当访问量超出服务器所能承载的极限时,redis缓存会直接挂掉,此时全部请求全部到达数据库,数据库无法抗住,便会导致数据库也挂掉。
解决方案:
1、缓存层的高可用Redis Sentinel 和 Redis Cluster 都实现了高可用。
2、使用Hystrix
Hystrix是一款开源的“防雪崩工具”,它通过 熔断、降级、限流三个手段来降低雪崩发生后的损失
穿透:
当一个服务器有上百万条的请求时,若是在redis缓存层查询不到这些请求的数据,那么这些请求便是直接访问到数据库,这种恶意攻击的缓存穿透就会使数据库直接挂掉(这种视缓存于无物的多数指黑客发来的恶意攻击)
解决方案:
只要去数据库中没查到,就写一个空值到缓存里去,然后设置一个过期时间,这样的话,下次有相同的 key 来访问的时候,在缓存失效之前,都可以直接从缓存中取数据。
击穿:
在某个key处于非常热点的时期,访问过多,处于集中式高并发访问的情况,当这个key在失效的瞬间,大量的请求将会击穿缓存,直接请求数据库,这种情况就像是在一道屏障上凿开了一个洞
解决方案:
1、可以将热点数据设置为永远不过期
2、基于 redis or zookeeper 实现互斥锁,等待第一个请求构建完缓存之后,再释放锁,进而其它请求才能通过该 key 访问数据。