天天看点

Redis - 高并发场景问题讲解

Redis - 高并发场景问题讲解
Redis - 高并发场景问题讲解
Redis - 高并发场景问题讲解
  • 当某个数据过期时,大量请求会从数据库获取数据,导致大量请求到达数据库,加大了数据库负载。
  • 解决思路,在某个缓存失效时,添加锁机制,使其他请求等待,只有一个请求去数据库更新数据。
  • 在高并发的场景下,某个key没有被命中,处于容错性考虑,会从后端(数据库)更新数据。从而使大量请求达到了数据库,而单该key本身对应的就是空的情况下,导致了并发的执行了很多操作,从而导致了巨大的冲击和压力。
  • 解决思路

    1、缓存空对象,对查询结果为空的对象也进行缓存。如果是集合,可以缓存空集合但不是(null)。如果是缓存单个对象,可以通过单个字段标识来区分,避免请求伸到后端数据库(适合命中不高,但频繁更新的数据)。

    2、对所有可能更新为空的key进行统一的存放,并对请求前做拦截。

  • 缓存的颠簸问题(缓存抖动):可以看做是比雪崩更轻的系统问题,但是在一定时间内也会对系统造成冲击和性能的影响。一般是由于缓存节点故障导致,通过一致性hash算法来解决。
  • 由于缓存的原因,导致大量的请求到达数据库,从而导致数据库崩溃,整个系统崩溃发生灾难。导致这种问题的原因有很多种,缓存并发,缓存穿透,缓存抖动,某个周期性时间点内缓存集中失效(通过设置不同的key的过期时间,错开时间避免集中失效,或者是在晚上请求较少的时候让他失效)、等问题。
  • 解决思路:通过设置不同的key的过期时间,错开时间避免集中失效,或者是在晚上请求较少的时候让他失效。从应用架构角度,我们可以从限流,降级,熔断等来降低影响。也可以从多级缓存来避免这种灾难。