美文网首页
第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