Redis之缓存穿透,缓存击穿,缓存雪崩
1 缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求,我们数据库的 id 都是1开始自增上去的,如发起为id值为 -1 的数据或 id 为特别大不存在的数据。这时的用户很可能是攻击者,攻击会导致数据库压力过大,严重会击垮数据库。
缓存穿透一般是人为攻击,解决手段可以是使用布隆过滤器,如果布隆过滤器判断不存在那就是不存在,请求也不会让它打到数据库
2 缓存击穿
缓存击穿是指一个Key非常热点,在不停的扛着大并发,大并发集中对这一个点进行访问,当这个Key在失效的瞬间,持续的大并发就穿破缓存,直接请求数据库,就像在一个完好无损的桶上凿开了一个洞。
设置热点数据永远不过期。或者加上互斥锁就能搞定了
3 缓存雪崩
缓存雪崩就是要么缓存没有提前把数据放进去,要么就是同一个时间点数据大批失效,导致大量的请求打到数据库进而可能把数据库打挂了
在批量往Redis存数据的时候,把每个Key的失效时间都加个随机值就好了,这样可以保证数据不会在同一时间大面积失效
或者热点数据永不过期。