zoukankan      html  css  js  c++  java
  • 缓存优化过程中的一些思考

    最近一段时间在做双十一的优化,对于缓存的使用和改造渐渐有了一些思考,记录一下

    • 缓存的使用、选择
      * 读简单,写复杂的业务最好放在写入端
      * 读复杂,写简单的业务逻辑放在读取端
      * 根据业务的类型,选择是使用集中式缓存还是分布式的
      * key-value的规则
      * 基础的cache需要关注的事:替换策略等等。。。

    • 缓存导致的数据不一致,补偿措施
      * 对于集中式的缓存做补偿是比较容易的
      * 对于分布式的相对来说比较麻烦,方案待考虑,TMD tair是怎么搞得,有同步机制补偿吗?感觉不太对啊,TODO

    • 缓存并发写入的问题
      * 缓存也是有状态的序列化对象,一定要注意并发的问题,md上次统一调度的是否确认审核就出现了这个情况,too young too simple

    • 大促期间的控制
      * 失效时间
      * 预热数据量
      * 预热校验
      * 预热流程:比如说预热会不会导致下游服务击穿,是否会存在批量DB操作或者引发DB性能问题
      * 预热的并发数量控制
      * 批量预热等

    • cache重建

    • 大批量缓存同时失效可能会导致缓存击穿率升高

      1. 缓存失效时间加一个随机数,避免同时失效
      2. 考虑是否需要失效后在做一下加载?看情况决定是否有必要,我感觉大促没必要
      3. 非关键链路应用加流控

    而且具体的的缓存实现方式也很有意思,看Guava的cache实现,使用了FutureTask的形式,这个设计四高一

  • 相关阅读:
    【OpenXml】Pptx的边框虚线转为WPF的边框虚线
    C#系列文章索引
    了解LINQ
    【爬虫系列】2. 打开App逆向“潘多拉魔盒”
    Makefile基础
    设计原则 开闭原则
    设计模式 工厂方法模式
    设计原则 接口隔离原则
    设计原则 迪米特法则
    设计原则 单一职责原则
  • 原文地址:https://www.cnblogs.com/kakaxisir/p/7426332.html
Copyright © 2011-2022 走看看