博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
分布式缓存一致性问题方案
阅读量:4119 次
发布时间:2019-05-25

本文共 825 字,大约阅读时间需要 2 分钟。

方案名称 技术特点 优点 缺点 适用 场景说明
数据实时同步更新 强一致性,更新数据库同时更新缓存,使用缓存工具和AOP实现 数据一致性强,不会出现缓存雪崩问题 代码耦合,运行期耦合 ,影响正常业务 ,增加一致网络开销 银行 适合写操作频繁的细粒度缓存数据,数据一致性要求比较高场景,如:银行业务,证券交易;不适合写操作较少粗粒度数据;
数据准实时更新 准一致性,更新数据库后,异步更新缓存,使用AOP进行封装基于多线程或者MQ实现 数据同步有较短延迟,与业务解耦,不影响正常业务,不会出现缓存雪崩问题 有较短延迟,无法保证最终一致性,需要补偿机制 比较优雅 不适合写操作平凡并且数据一致性实时性要求严格的场景(较短不一致,写频繁导致mq消息剧增)
缓存失效机制 弱一致性,基于缓存本身失效机制 实现简单,与业务完美结合,不影响正常业务 有一定延迟,存在缓存雪崩问题 互联网大量使用 不适合写操作平凡并且数据一致性实时性要求严格的场景,适合读多写少的互联网婵娟,能接受一定数据延时;如:电商业务,理财金融(收益第二天更新),社交类业务(点赞)等
任务调度更新 最终一致性,采用任务调度框架,按照一定频率更新 不影响正常业务 不保证一致性,代码复杂度增大(么个value都要维护异步更新代码),容易堆积垃圾数据 统计类 适合复杂统计类数据缓存更新,对数据一致性实时性要求低的场景,如统计类数据,BI分析等

 

方案1:

 productDao.insert(product);

 redis.delete(productId);

方案2:

productDao.insert(product);

mq.sender(productId);

mq接收客户端收到消息后,从redis获取数据更新;

方案3:

redis.set(productId, expireTime); //例如过期3s, 但是存在缓存雪崩(缓存穿透到数据库)

请参考“缓存雪崩和缓存击穿”。

转载地址:http://jccpi.baihongyu.com/

你可能感兴趣的文章
springcloud 连续请求 500
查看>>
vue复用新增和编辑表单
查看>>
Ubuntu 16.04 apt-get更换为国内阿里云源
查看>>
laravel部署到宝塔步骤
查看>>
小程序获取access_token
查看>>
navicat远程连接mysql数据库
查看>>
tp5令牌数据无效 解决方法
查看>>
自己的网站与UCenter整合(大致流程)
查看>>
laravel 制作通用的curd 后台操作
查看>>
【小红书2017年笔试】求一个数组中平均数最大的子数组
查看>>
Linux基础系列-定时器与时间管理
查看>>
Linux基础系列-可执行程序的产生过程
查看>>
Linux基础系列-Kernel 初始化宏
查看>>
Linux子系统系列-I2C
查看>>
<iOS>关于自定义description的一点用法
查看>>
Unix 命令,常用到的
查看>>
DLL中建立进程共享数据段需要注意的语法问题
查看>>
服务器端技术----Http请求的处理过程
查看>>
C语言-预处理指令2-条件编译
查看>>
C语言-预处理指令3-文件包含
查看>>