第11章 缓存设计

2018-05-31  本文已影响10人  leon4ever

主要内容如下:

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. 永远不过期:没有过期时间或到期后,用单独线程去重建
上一篇下一篇

猜你喜欢

热点阅读