美文网首页
第11章 缓存设计

第11章 缓存设计

作者: leon4ever | 来源:发表于2018-05-31 18:20 被阅读10次

主要内容如下:

  • 缓存的收益和成本分析
  • 缓存更新策略的选择和使用场景
  • 缓存粒度控制方法
  • 穿透问题优化
  • 无底洞问题优化
  • 雪崩问题优化
  • 热点key重建优化

1. 缓存的收益和成本

收益如下:

  1. 加速读写
  2. 降低后端负载

成本如下:

  1. 数据不一致性
  2. 代码维护成本
  3. 运维成本

缓存的使用场景:

  1. 开销大的复杂计算
  2. 加速请求响应

2. 缓存更新策略

  1. LRU,LFU, FIFO算法剔除:用于超过缓存容量
  2. 超时剔除:设置数据过期时间
  3. 主动更新:真实数据更新后,立即更新缓存数据

3. 缓存粒度控制

缓存层使用Redis,存储层使用MySQL

缓存全部属性?部分重要属性?

  • 通用性:实际经验看,很长时间内应用只需要几个很重要的属性,缓存的局部性原理
  • 空间占用:缓存全部会造成内存浪费
  • 代码维护:全部数据更容易维护

4. 穿透优化

缓存穿透是指查询一个根本不存在的数据,缓存层和存储层都不会命中,导致不存在的数据每次请求到要到存储层查询,失去了缓存保护后端存储的意义。导致后端存储负载加大

  1. 缓存空对象:存储层不命中后,仍然将空对象保留到缓存层中
  2. 布隆过滤器拦截:做第一层拦截,如果不存在,就不访问存储层

5. 无底洞优化

添加大量缓存节点,性能反而下降

  • 客户端一次批量操作会设计多次网络操作,批量操作随节点增多耗时加大
  • 网络连接数多,节点性能受影响
  1. 串行命令
  2. 串行I/O:根据节点划分一下,网络次数是node个数
  3. 并行I/O:将最后一步改为多线程执行
  4. hash_tag实现:将多个key强制分配到一个节点上

6. 雪崩优化

缓存层宕机后,流量会崩向后端存储

  1. 保证缓存层服务高可用
  2. 依赖隔离组建为后端限流并降级
  3. 提前演练

7. 热点key重建优化

热点key失效后大量线程重建缓存.jpg
  1. 互斥锁:只允许一个线程重建缓存
  2. 永远不过期:没有过期时间或到期后,用单独线程去重建

相关文章

网友评论

      本文标题:第11章 缓存设计

      本文链接:https://www.haomeiwen.com/subject/myqcsftx.html