缓存数据库redis相关问题
1缓存穿透:
什么是缓存穿透,就是当一个用户发出请求,但是数据库不存在这个数据,那么redis缓存便不会记录这次访问的结果,那么这个用户若是一直发出这个请求,那么请求每次都会穿过缓存,访问到我们的数据库,这个就会增加数据库的压力,要是有人恶意攻击,那么就有可能造成数据库压力过大,甚至挂掉。
解决方案:
当用户访问数据库不存在的数据时,此时也可以把结果存到数据库,比如结果是null,当然这种无效的数据,那么它的失效时间可以设置短一点,比如一分钟,或者20-30秒,
2缓存雪崩:
缓存雪崩:顾名思义,就是redsi中存储的key在同一时间,大范围失效,如果访问量比较多,那么就会在同一时间,大量请求直接访问数据库,那么就会造成数据库压力过大,甚至挂掉。宕机。
解决方案:给不同热度的数据设置不同过去时间,比较热门的数据可以将数据设置成永不过期,比较冷门的过期时间可以设置短一点。这样就可以防止key在同一时间,大范围失效。
3缓存击穿:
这个很好理解:就假如有一个热点数据,大家都在访问,那么当这个热点数据在缓存中失效的一瞬间,大量请求访问数据库,那么此时数据库就有可能挂掉。
解决方案:像这种热点,一般可以设置为永不过期