缓存:用于数据高速交换的介质

  1. 缓存失效:
    1. key过期,多key一起失效,批量写入缓存,一起到期
    2. 解决:批量写入时,预置过期时间添加随机时间,避免瞬时大量过期
  2. 缓存穿透:
    1. 大量查询不存在的key,特殊访问,前端-->db,db压力过载
    2. 解决:特殊缓存(cache中缓存一个默认值),BloomFilter过滤器(海量数据的与否判断),bit数组集合,对于一个key进行多个hash
  3. 缓存雪崩:
    1. 部分缓存节点不可用,导致整个缓存体系不可用(支持rehash/不支持rehash)
    2. 流量洪峰一致性hash,rehash,节点过载扩散,多节点宕机,
      1. 增加db读写开关,达到阀值,关闭开关,failfast
      2. 缓存副本,cache池miss后,读其他cache副本
      3. 缓存监控,达到阀值,故障转移
  4. db与缓存数据不一致:
    1. 更新db后写缓存失败,rehash节点多次上下线,带宽打满,机器宕机
    2. 解决:
      1. cache更新失败重试,失败key写入队列机
      2. 调短过期时间,db重新加载
      3. 不采用rehash漂移,采用缓存分层策略
  5. 数据并发竞争
    1. 多个进程/线程,并发访问过期数据,没有协调一起访问
    2. 解决:
      1. 全局锁,一个线程读取加锁,
      2. 缓存保持多个备份
  6. hot key
    1. 最近新闻,热数据,大量访问
    2. 解决:
      1. 提前评估hot key,分散处理  hot_key_1,hot_key_2......
      2. 缓存多副本
      3. 快速扩容
      4. 本地缓存
  7. big key
    1. key 的value过大
    2. 解决
      1. 设计缓存阀值,对value压缩
      2. 采用新结构
      3. 拆分多个小key,适当增加过期时间