缓存击穿,穿透以及缓存雪崩的概念
缓存穿透
在高并发下,查询一个不存在的值时,缓存不会被命中,导致大量请求直接落到数据库上,如活动系统里面查询一个不存在的活动。
也就是说:缓存穿透是指,请求的是缓存和数据库中都没有的数据!
对于缓存穿透问题,有一个很简单的解决方案,就是缓存NULL值~从缓存取不到的数据,在数据库中也没有取到,直接返回空值。
缓存击穿
在高并发下,对一个特定的值进行查询,但是这个时候缓存正好过期了,缓存没有命中,导致大量请求直接落到数据库上,如活动系统里面查询活动信息,但是在活动进行过程中活动缓存突然过期了。
也就是说:缓存击穿是指,请求的是缓存没有,而数据库中有的数据!
记住,解决击穿的最简单的方法,只有一个,就是限流!例如其他文章提到的布隆过滤器,布谷过滤器等,不过是限流方式之一而已!
缓存雪崩
在高并发下,大量的缓存key在同一时间失效,导致大量的请求落到数据库上,如活动系统里面同时进行着非常多的活动,但是在某个时间点所有的活动缓存全部过期。
那么针对该问题,最简单的解决方法就是,过期时间加随机值!