缓存雪崩

  • 描述
    • 大量的 key 设置了相同的过期时间,导致在缓存在同一时刻全部失效,造成瞬时 DB 请求量大、压力骤增,引起雪崩。
  • 解决方案
    • 分级缓存
    • 给缓存设置过期时间时加上一个随机值时间,使得每个key的过期时间分布开来,不会集中在同一时刻失效。

缓存穿透

  • 描述
    • 访问一个不存在的 key 时,缓存不起作用,请求会穿透到 DB ,流量大时 DB 自然就会瘫痪。
  • 解决方案
    • 利用互斥锁,缓存失效的时候,先去获得锁,得到锁了,再去请求数据库。没得到锁,则休眠一段时间重试。
    • 即使查询到的数据为空,仍把该空值缓存,还需要设置过期时间。
    • 布隆过滤器,内部维护一系列合法有效的 key 就可以迅速判断出请求所携带的key是否合法有效。如果不合法,则直接返回。

缓存击穿

  • 描述
    • 一个存在的 key,在缓存过期的一刻,恰好在这个时间点对这个 key 有大量的并发请求过来,这个时候大量的请求可能会瞬间瘫痪掉 DB 。
  • 解决方案
    • 分级缓存
    • 互斥锁

缓存预热

  • 描述
    • 系统上线后,提前将数据刷到缓存。避免用户在访问的时候,先去查询数据库。
  • 解决方案
    • 数据量不大的时候,工程启动的时候进行加载缓存
    • 数据量大的时候,设置一个定时任务脚本,进行缓存的刷新
    • 数据量太大的时候,优先保证热点数据进行提前加载到缓存

缓存降级

缓存降级是指缓存失效或缓存服务器挂掉的情况下,不去访问数据库,直接返回默认数据或访问服务的内存数据