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