缓存穿透、击穿、雪崩
缓存穿透
当大量请求访问的数据在并不存在时,也不能建立缓存,每个请求都会打到数据库,当请求量超过数据库承载能力时,数据库可能被打挂
比如,访问id为0的用户,数据库和缓存都不存在该用户数据,不断访问这个id则会导致数据库崩溃
解决方案:
1、使用布隆过滤器,将数据写入过滤器,如果是不存在的数据就无法再过滤器中查询到数据,丢弃请求或者返回默认值
2、增加参数校验,不合法的参数进行拦截
3、即使不存在的数据也加上缓存,设置合理的超时时间
缓存击穿
热点key缓存过期,导致大量并发访问热点数据的请求查询不到缓存时,需要查询数据库,由于同一时间压力陡增,数据库有崩溃的风险
解决方案:
1、热点数据不过期或者自动续期
2、加互斥锁,查询不到缓存时,只有第一个请求访问数据库
缓存雪崩
大量热点key,同一时间过期,导致大量请求打到数据库,数据库压力像雪崩一样越来越大
解决方案:
1、热点数据不过期或者自动续期
2、设置的缓存时间加上随机值,避免同时过期
3、加互斥锁,查询不到缓存时,只有第一个请求访问数据库