缓存穿透

当大量请求访问的数据在并不存在时,也不能建立缓存,每个请求都会打到数据库,当请求量超过数据库承载能力时,数据库可能被打挂

比如,访问id为0的用户,数据库和缓存都不存在该用户数据,不断访问这个id则会导致数据库崩溃

解决方案:

1、使用布隆过滤器,将数据写入过滤器,如果是不存在的数据就无法再过滤器中查询到数据,丢弃请求或者返回默认值

2、增加参数校验,不合法的参数进行拦截

3、即使不存在的数据也加上缓存,设置合理的超时时间

缓存击穿

热点key缓存过期,导致大量并发访问热点数据的请求查询不到缓存时,需要查询数据库,由于同一时间压力陡增,数据库有崩溃的风险

解决方案:

1、热点数据不过期或者自动续期

2、加互斥锁,查询不到缓存时,只有第一个请求访问数据库

缓存雪崩

大量热点key,同一时间过期,导致大量请求打到数据库,数据库压力像雪崩一样越来越大

解决方案:

1、热点数据不过期或者自动续期

2、设置的缓存时间加上随机值,避免同时过期

3、加互斥锁,查询不到缓存时,只有第一个请求访问数据库

标签: none

添加新评论