zoukankan      html  css  js  c++  java
  • 缓存的设计模式

    • Cache Aside(旁路缓存)  一致性要求
    • Read / Write Through(读写穿透)  系统隔离
    • Write Behind Caching(异步缓存写入)  数据大量写 点赞计数需求

    ref

    https://blog.csdn.net/hualaoshuan/article/details/102638188


    具体策略

    策略描述

    优点

    缺点

    更新策略

    (缓存更新时机不同。影响数据准确性)

    实时更新

    源数据新增或更新后,立即更新缓存

    1、数据实时性高

    2、数据一致性高

    1、若数据更新机制和触发时机很多且复杂,缓存数据一致性维护成本高。有遗漏数据更新场景导致数据不一致的风险

    2、缓存不能设置过期时间,冷访问数据占用内存

    3、新增缓存需要刷历史数据

    延迟更新

    轮询主动更新

    每间隔一段时间查询最新数据,并更新缓存

    1、缓存数据维护简单统一

    2、新增缓存无需刷历史数据

    1、短时间内数据不准确(轮询时间间隔)

    2、需考虑轮询时间如何设置

    3、需考虑每次轮询哪些数据

    4、不区分冷热数据,冷访问数据会占用内存

    读请求触发同步更新

    读未命中(包括缓存过期),则查询源数据,更新缓存,并返回结果。

    1、缓存数据维护简单统一

    2、新增缓存无需刷历史数据

    3、冷访问数据会自动过期,减少内存占用

    4、开发简单

    1、短时间内数据不准确(必须设置过期时间)

    2、需考虑过期时间如何设置

    3、要考虑源数据为空时,回种空值问题,否则会出现缓存穿透。若回种空值则可能占用大量内存

    读请求触发异步更新

    读未命中(包括缓存过期),则发布异步事件,更新缓存。

    读取策略(影响接口性能)

    只读缓存(cache-only)

    依赖缓存数据,缓存未命中则返回空。

    1、响应时间更快

    1、数据准确性由选择的更新策略决定。不与【读请求触发同步更新】策略结合使用

    2、需要保证缓存组件高可用

    读穿(read-through)

    读未命中,则查询源数据,更新缓存,并返回结果。

    1、rpc调用兜底,不会出现有数据却不展示的情况

    1、数据准确性由选择的更新策略决定。不与【读请求触发异步更新】策略结合使用

    2、若未命中,响应时间慢

  • 相关阅读:
    ts 问号点 ?.
    moment获取本月、上个月、近三个月时间段
    iframe优缺点
    Git问题解决方案:不建议在没有为偏离分支指定合并策略时执行pull操作(Pulling without specifying how to reconcile divergent branches)
    Mac上git自动补全功能
    webstorm 使用积累
    什么是EPG?
    chrome浏览器devtools切换主题(亮色,暗色)
    python—requests的基本使用
    Chrome Devtool Performance
  • 原文地址:https://www.cnblogs.com/huilei/p/12357412.html
Copyright © 2011-2022 走看看