并发经验八年架构师:带你轻松解决缓存在高并发场景下的问题( 四 )

单独过滤处理

对所有可能对应数据为空的key进行统一的存放 , 并在请求前做拦截 , 这样避免请求穿透到后端数据库 。 这种方式实现起来相对复杂 , 比较适合命中不高 , 但是更新不频繁的数据 。

缓存颠簸问题

缓存的颠簸问题 , 有些地方可能被成为“缓存抖动” , 可以看作是一种比“雪崩”更轻微的故障 , 但是也会在一段时间内对系统造成冲击和性能影响 。 一般是由于缓存节点故障导致 。 业内推荐的做法是通过一致性Hash算法来解决 。 这里不做过多阐述 , 可以参照其他章节

缓存的雪崩现象

缓存雪崩就是指由于缓存的原因 , 导致大量请求到达后端数据库 , 从而导致数据库崩溃 , 整个系统崩溃 , 发生灾难 。 导致这种现象的原因有很多种 , 上面提到的“缓存并发” , “缓存穿透” , “缓存颠簸”等问题 , 其实都可能会导致缓存雪崩现象发生 。 这些问题也可能会被恶意攻击者所利用 。 还有一种情况 , 例如某个时间点内 , 系统预加载的缓存周期性集中失效了 , 也可能会导致雪崩 。 为了避免这种周期性失效 , 可以通过设置不同的过期时间 , 来错开缓存过期 , 从而避免缓存集中失效 。

推荐阅读