缓存穿透
缓存穿透是指在 redis缓存与数据库中都没有数据,用户恶意大量请求不存在的数据,比如订单号为-1的情况,由于缓存与数据库中的不存在该数据,所有的请求都会直接穿透到数据库,会导致数据库崩溃。
解决方案: 过滤器(filter),进行合法校验,可以拦截大部分不合法的请求。
缓存击穿
缓存击穿是指 数据库中原本有的数据,但缓存中没有,一般是由于缓存突然的失效,这时候如果有大量的用户请求该数据,缓存中不存在则会去请求数据库,会引发数据库压力增大,可能瞬间被崩溃。
解决方案: 如果是热点数据可以考虑设定永不过期,如果是一定需要设定过去时间,那么就需要设置一个互斥的锁,只让一个请求通过,只要有一个请求去拉取数据,取完数据,不管如何都应该释放锁,异常也需要释放,不然其他线程会拿不到锁。
缓存雪崩
缓存雪崩指的是缓存中存在大量的数据,在同一个时间节点内全部失效过期,这个时候请求的数据过来,缓存中没有数据会请求数据库,则数据库压力倍增,扛不住是会宕机的。
解决方案:、
1.设定缓存永不过期,但如果是热点数据的话,可能也比较危险
2.过期时间随机,不要同一个时间过期
3.双缓存机制,可以保证