由简入繁,水滴石穿。
Redis 缓存雪崩
这个很好理解,就是所有缓存在同一时间过期,统一时间进行缓存刷新,系统承受不住压力从而崩溃。
这个问题在开发阶段就需要多加注意,解决方案不难想出。与单机服务架构使用Ehcache类似,每一个缓存进行单独的时间时间控制,多组缓存失效时间错开,将查询频率高使用频繁的缓存进行细化,筛选排列优先级保证缓存失效时间不一致就可以,或者设置成不过期,定时更新就好。
Redis 缓存击穿
击穿与雪崩类似,简单讲就是有用户在不停的请求一个连接,反复获取这个数据,频率很快;当这个缓存有效期到期后,会直接查询数据库;这里本来是没是的,因为是正常流程,但是这个请求频率快,会导致多组请求都到数据库,造成崩溃。
Redis 缓存穿透
这个更好理解,就是用户查询一个缓存内不存在的key,常规流程是缓存中没有就去查询数据库,但碰巧数据库也没有;如果这个用户是攻击者,那就会持续使用这个不存在的查询条件发起请求,造成压力从而击垮数据库。
这种方式的解决办法有很多,可以使用BloomFilter进行拦截。也可以使用Hystrix进行限流。