1. 缓存雪崩:是指在某一个时间段,缓存集中过期失效或者redis服务器挂了,导致数据全部请求DB。
比如,设置的数据的过期的时间是1小时,但是一小时之后,这个数据全部过期,导致大量的查询全部走DB.
解决办法:
1 )尽量设置过期的时间不要分布在同一时间,可以加个随机数;
2 )可以设置分布式锁;
3 )可以做二级缓存,A1为原始缓存,A2为拷贝缓存,A1失效时,可以访问A2,A1缓存失效时间设置为短期,A2设置为长期;
缓存穿透:缓存和数据库中都没有的数据,而用户不断发起请求,如发起为id为“-1”的数据或id为特别大不存在的数据。这时的用户很可能是攻击者,攻击会导致数据库压力过大。
解决办法:
1)接口层增加校验,如用户鉴权校验,id做基础校验,id<=0或者id的位数不是自己创建的位数不是自己定义的长度的拦截,
2)从缓存取不到的数据,在数据库中也没有取到,这时也可以将key-value对写为key-null,这样可以防止攻击用户反复用同一个id暴力攻击;
3)布隆过滤器;简图如下
3 缓存与数据库数据一致性:
网友评论