缓存维护方案一

如果是一读(线程B)一写(线程A)操作,「先操作缓存,再操作数据库」。流程图如下所示:

  • 1.线程A发起一个写操作,第一步del cache

  • 2.线程A第二步写入新数据到DB

  • 3.线程B发起一个读操作,cache miss缓存失效了。

  • 4.线程B从DB获取最新数据

  • 5.线程B执行set cache,把从DB读到的数据,更新到缓存。

「这样看,没啥问题」。我们再看第二个流程图,如下:

  • 1.线程A发起一个写操作,第一步del cache

  • 2.此时线程B发起一个读操作,cache miss

  • 3.线程B继续读DB,读出来一个老数据

  • 4.然后老数据设置入cache

  • 5.线程A写入DB最新的数据

OK,酱紫,就有问题了吧,老数据入到缓存了,「每次读都是老数据啦,缓存与数据与数据库数据不一致了」

缓存维护方案二

上个方案是一读一写,如果是双写操作,「先操作缓存,再操作数据库」,会怎么样呢?

  • 1.线程A发起一个写操作,第一步set cache

  • 2.线程A第二步写入新数据到DB

  • 3.线程B发起一个写操作,set cache

  • 4.线程B第二步写入新数据到DB

「这样看,也没啥问题。」,但是有时候可能事与愿违,我们再看第二个流程图,如下:

  • 1.线程A发起一个写操作,第一步set cache

  • 2.线程B发起一个写操作,第一步set cache

  • 3.线程B写入数据库到DB

  • 4.线程A写入数据库到DB

执行完后,缓存保存的是B操作后的数据,数据库是A操作后的数据,「缓存和数据库数据不一致」

缓存维护方案三

一写(线程A)一读(线程B)操作,「先操作数据库,再操作缓存」

  • 1.线程A发起一个写操作,第一步write DB

  • 2.线程A第二步del cache

  • 3.线程B发起一个读操作,cache miss

  • 4.线程B从DB获取最新数据

  • 5.线程B同时set cache

「有些朋友可能认为,在第2步删除缓存之前,线程B读过来呢?这时候,读到的是缓存老数据,这个可以认为是正常业务逻辑呀,下次再读取就是正确数据了。」

这种方案**「没有明显的并发问题」,但是有可能「步骤二删除缓存失败」,虽然概率比较小,「优于方案一和方案二」**,平时工作中也是使用方案三。

综上对比,我们一般采用方案三,但是有没有完美全解决方案三的弊端的方法呢?

缓存维护方案四

这个是方案三的改进方案,都是先操作数据库再操作缓存,我们来看一下流程图:

通过数据库的**「binlog」「异步淘汰key」,以mysql为例 可以「使用阿里的canal将binlog日志采集发送到MQ队列」里面,然后「通过ACK机制 确认处理」** 这条更新消息,删除缓存,保证数据缓存一致性。

但是呢还有个问题,「如果是主从数据库呢」

缓存维护方案五

主从DB问题:因为主从DB同步存在延时时间。如果删除缓存之后,数据同步到备库之前已经有请求过来时,「会从备库中读到脏数据」,如何解决呢?解决方案如下流程图:

缓存维护总结

综上所述,在分布式系统中,缓存和数据库同时存在时,如果有写操作的时候,「先操作数据库,再操作缓存」。如下:

  • 1.读取缓存中是否有相关数据
  • 2.如果缓存中有相关数据value,则返回
  • 3.如果缓存中没有相关数据,则从数据库读取相关数据放入缓存中key->value,再返回
  • 4.如果有更新数据,则先更新数据库,再删除缓存
  • 5.为了保证第四步删除缓存成功,使用binlog异步删除
  • 6.如果是主从数据库,binglog取自于从库
  • 7.如果是一主多从,每个从库都要采集binlog,然后消费端收到最后一台binlog数据才删除缓存

最后

作为过来人,小编是整理了很多进阶架构视频资料、面试文档以及PDF的学习资料,针对上面一套系统大纲小编也有对应的相关进阶架构视频资料,如果**‘你’确定好自己未来的道路或者想学习提升自己技术栈、技术知识的小伙伴们可以点击这里来获取免费学习资料提升自己(全套面试文档、PDF、进阶架构视频)**


va-p7)提升自己(全套面试文档、PDF、进阶架构视频)**

[外链图片转存中…(img-uMgL2rKO-1626688897205)]
[外链图片转存中…(img-carA01Nh-1626688897205)]

【聊透SpringMVC】java技术经理岗位职责相关推荐

  1. 2022最新基于 Spring Cloud 的微服务架构分析,java 技术经理岗位职责

    构建在开发团队之外的 API 网关必须具备负载均衡能力,可以配置多个 IP 地址.通过该 API 网关也最好具备和 Docker 容器扩展后的服务自动注册和地址加入扩展能力. Eureka 的竞品分析 ...

  2. 产品经理岗位职责说明_技术负责人岗位职责,五大方面,超越岗位抓住未来才是技术大牛...

    技术负责人一般指建设领域.生产制造领域.电子商务领域,负责全过程的技术决策.技术指导. 技术负责人的岗位职责包含五个方面: 技术职责:负责具体技术方案设计思路.关键参数等技术决策,负责对所有技术人员进 ...

  3. java中级工程师所需的技能_一个Java工程师的岗位职责及所需的知识技能!

    据调查显示,世界上有大约900万的Java开发人员,作为即将成为这900万大军中的一员,你知道去企业后你的工作职责是什么吗?作为一名Java开发人员需要掌握哪些知识技能呢?这些可都关系到你的成长和利益 ...

  4. 技术总监岗位职责,网站技术总监的职能

    技术总监岗位职责 1 负责起草公司技术发展规划,上报总经理办公会审批并依照审批决议实施: 2 领导公司技术人员完成公司签约的工程项目和咨询项目及申报项目的技术部份: 3 负责规划并形成公司行业解决方案 ...

  5. 软件开发项目经理岗位职责

    主要职责: 1. 计划: a)项目范围.项目质量.项目时间.项目成本的确认, 软件开发项目经理岗位职责. b)项目过程/活动的标准化.规范化. c)根据项目范围.质量.时间与成本的综合因素的考虑,进行 ...

  6. 软件公司项目经理岗位职责

    原文地址为: 软件公司项目经理岗位职责 一.软件公司项目经理岗位职责 主要职责: 1. 计划: a)项目范围.项目质量.项目时间.项目成本的确认. b)项目过程/活动的标准化.规范化. c)根据项目范 ...

  7. it项目经理岗位职责(转)

    一.软件公司项目经理岗位职责 主要职责: 1. 计划: a)项目范围.项目质量.项目时间.项目成本的确认. b)项目过程/活动的标准化.规范化. c)根据项目范围.质量.时间与成本的综合因素的考虑,进 ...

  8. 软件实施经理岗位职责

    最近公司准备找项目实施经理角色人员,刚好整理下以作参考, 软件实施经理岗位职责 1.负责项目的实施过程管理: 2.进行项目绩效考核.成本预算.和质量控制: 3.进行实施过程中的需求整理和反馈:进行需求 ...

  9. 产品经理是做什么的?产品经理岗位职责说明

    内容简介:当下,应聘的职位也是五花八门的,就拿经理职位来说吧,有项目经理.客户经理.产品经理等等,对于有些公司来讲,经理职位可以不再是内部提拔而是直接对外招聘的了,总之是有才有能力者居之. 刚过完春节 ...

最新文章

  1. setxor--求两个集合交集的非(异或)
  2. 2015年第六届蓝桥杯C/C++ A组国赛 —— 第一题:方格填数
  3. 【zTree】基于zTree动态生成树节点的一些应用
  4. 调用Hybris API时遇到的错误消息Cannot find user with uid如何解决
  5. sql 查询重复行数据
  6. 大数据_Flink_Java版_数据处理_流处理API_Transform(5)_union合流---Flink工作笔记0034
  7. SQL Server 2005存储过程示例
  8. Kubernetes 小白学习笔记(3)--物理机、虚拟化、容器化、云原生
  9. Android图片添加水印
  10. Kindle DXG的一些使用方法及技巧
  11. 每月一书(202106):《刻意练习》(一万小时定律正确吗)
  12. windows system info
  13. 如果房贷被拒了怎么办?
  14. 学人工智能买什么电脑?
  15. 在seo中,怎么写原创文章。
  16. Jmeter如何进行接口测试-实操
  17. 碗状碎块三维模型的下载(.PLY格式)3D model file with Bowl-shaped Broken Piece (.ply format)
  18. centos7搭建DNS服务器的详细过程总结
  19. 黑马程序员------StringBuffer描述(黑马视频)
  20. Peterson算法的简单分析

热门文章

  1. 06链队列_LinkQueue--(栈与队列)
  2. Wordpress prettyPhoto插件跨站脚本漏洞
  3. 2006年2月8日 再见,Borland
  4. 中大计算机考研复试刷人太狠,中山大学考研复试被刷原因大盘点!
  5. php检测数组类型,javascript中通过哪些方法来检测数组类型?
  6. pHp中文网零基础,零基础编程
  7. python高级语法装饰器_Python高级编程——装饰器Decorator超详细讲解上
  8. php 工资 2018,佛山市2018年平均工资(社平工资)
  9. STM32F1笔记(九)通用定时器
  10. 变量和简单数据类型(一)