缓存三兄弟

“缓存三兄弟”,即 Redis 缓存穿透、缓存击穿、缓存雪崩。这是在后端开发中与缓存相关的三个经典问题,以下是它们的详细解释:

  1. 缓存穿透
    缓存穿透是指用户请求的数据既不在缓存中,也不存在于数据库中。由于缓存无法命中,所有请求都会直接落到数据库上,可能导致数据库压力过大甚至崩溃。常见的解决方法包括:

    • 使用 布隆过滤器 拦截非法请求。
    • 对查询结果为空的请求也进行缓存(例如缓存一个空值),并设置较短的过期时间。
  2. 缓存击穿
    缓存击穿是指某些热点数据在缓存中失效后,短时间内有大量请求同时访问该数据,导致这些请求直接打到数据库,造成瞬时压力激增。解决方案包括:

    • 设置热点数据永不过期
    • 使用 互斥锁单线程更新缓存,确保只有一个请求能更新缓存,其余请求等待缓存更新完成。
  3. 缓存雪崩
    缓存雪崩是指大量缓存数据在同一时间失效,导致大量请求直接涌向数据库,可能引发系统崩溃。为避免缓存雪崩,可以采取以下措施:

    • 为缓存设置随机过期时间,避免大量缓存同时失效。
    • 在缓存失效时,使用 降级策略,如返回默认值或限流保护数据库。