- Tag
- Cache
缓存雪崩,通常为大量 key 同时过期,导致大量请求直接落到存储层,导致存储层被调用量暴增,最终级联宕机的情况。
解决方案:
- 打散 key 的过期时间,避免大量 key 同时过期打挂存储层。
缓存穿透,是指请求的 key 在缓存中不存在,导致这些请求会穿透缓存直接打到存储层。
解决方案:
- 预热数据,避免冷启动时,大量流量穿透缓存落在存储层上,造成数据不可用
- 缓存不存在的 key,但会带来更多的内存消耗,同时如果新增了这样的 key 需要更新缓存
- 设置 Bloom fliter,在进入缓存前通过 Bloom filter 判断是否可能存在
缓存击穿,是指缓存中的某个热 key 过期,导致瞬间有大量的请求穿过缓存直接达到存储层。和雪崩不一样,雪崩是大量热 key 同时失效,击穿是单个 key 大量请求。
解决方案:互斥锁,当大量请求获取一个缓存中不存在的 key 时,只允许一个线程请求存储层并更新数据,其他线程等待这个线程的更新结果,比如用 sync/singleflight。