主要内容如下:
- 缓存的收益和成本分析
- 缓存更新策略的选择和使用场景
- 缓存粒度控制方法
- 穿透问题优化
- 无底洞问题优化
- 雪崩问题优化
- 热点key重建优化
1. 缓存的收益和成本
收益如下:
- 加速读写
- 降低后端负载
成本如下:
- 数据不一致性
- 代码维护成本
- 运维成本
缓存的使用场景:
- 开销大的复杂计算
- 加速请求响应
2. 缓存更新策略
- LRU,LFU, FIFO算法剔除:用于超过缓存容量
- 超时剔除:设置数据过期时间
- 主动更新:真实数据更新后,立即更新缓存数据
3. 缓存粒度控制
缓存层使用Redis,存储层使用MySQL
缓存全部属性?部分重要属性?
- 通用性:实际经验看,很长时间内应用只需要几个很重要的属性,缓存的局部性原理
- 空间占用:缓存全部会造成内存浪费
- 代码维护:全部数据更容易维护
4. 穿透优化
缓存穿透是指查询一个根本不存在的数据,缓存层和存储层都不会命中,导致不存在的数据每次请求到要到存储层查询,失去了缓存保护后端存储的意义。导致后端存储负载加大
- 缓存空对象:存储层不命中后,仍然将空对象保留到缓存层中
- 布隆过滤器拦截:做第一层拦截,如果不存在,就不访问存储层
5. 无底洞优化
添加大量缓存节点,性能反而下降
- 客户端一次批量操作会设计多次网络操作,批量操作随节点增多耗时加大
- 网络连接数多,节点性能受影响
- 串行命令
- 串行I/O:根据节点划分一下,网络次数是node个数
- 并行I/O:将最后一步改为多线程执行
- hash_tag实现:将多个key强制分配到一个节点上
6. 雪崩优化
缓存层宕机后,流量会崩向后端存储
- 保证缓存层服务高可用
- 依赖隔离组建为后端限流并降级
- 提前演练
7. 热点key重建优化

- 互斥锁:只允许一个线程重建缓存
- 永远不过期:没有过期时间或到期后,用单独线程去重建
网友评论