大量的高并发的请求打在Redis上,但是发现Redis中并没有请求的数据,redis的命令率降低,所以这些请求就只能直接打在DB(数据库服务器)上,在大量的高并发的请求下就会导致DB直接卡死、宕机。
缓存穿透
当客户端大量请求缓存和数据库都不存在的值
解决方式
1.在缓存中添加一个为null的空值
2.实时监控
3.接口校验,对于无效访问直接拦截,不请求到redis和数据库
4.使用BitMap作为布隆过滤器,将目前所有可以访问到的资源通过简单的映射关系放入到布隆过滤器中,进行判断如果有那么才进行放行,否则就直接拦截
缓存击穿
当客户端大量请求访问缓存中某个过期数据,导致请求直接访问数据库
解决方式
1.提前设置热点数据
2.使用锁机制
3.监控哪些数据是热门数据,实时的调整key的过期时长
缓存雪崩
当客户端访问,大量缓存数据过期,导致请求直接访问数据库
解决方式
1.将失效时间随机设置,防止集体过期
2.使用锁或队列
3.记录缓存数据是否过期,如果过期会触发通知另外的线程在后台去跟新实际的key
4.构建多级缓存,比如redis缓存、本地缓存,使得不同的缓存有差异化