Skip to content

Latest commit

 

History

History
26 lines (18 loc) · 1.38 KB

cache-problems.org

File metadata and controls

26 lines (18 loc) · 1.38 KB

Cache problems

Tag
Cache

缓存雪崩

缓存雪崩,通常为大量 key 同时过期,导致大量请求直接落到存储层,导致存储层被调用量暴增,最终级联宕机的情况。

解决方案:

  1. 打散 key 的过期时间,避免大量 key 同时过期打挂存储层。

缓存穿透

缓存穿透,是指请求的 key 在缓存中不存在,导致这些请求会穿透缓存直接打到存储层。

解决方案:

  1. 预热数据,避免冷启动时,大量流量穿透缓存落在存储层上,造成数据不可用
  2. 缓存不存在的 key,但会带来更多的内存消耗,同时如果新增了这样的 key 需要更新缓存
  3. 设置 Bloom fliter,在进入缓存前通过 Bloom filter 判断是否可能存在

缓存击穿

缓存击穿,是指缓存中的某个热 key 过期,导致瞬间有大量的请求穿过缓存直接达到存储层。和雪崩不一样,雪崩是大量热 key 同时失效,击穿是单个 key 大量请求。

解决方案:互斥锁,当大量请求获取一个缓存中不存在的 key 时,只允许一个线程请求存储层并更新数据,其他线程等待这个线程的更新结果,比如用 sync/singleflight