MySQL与Redis的双写一致性解决方案

文章目录

    • 一、解决方案
      • 1.1 先更新缓存,再更新数据库
      • 1.2 先删除缓存,再更新数据库
      • 1.3 先更新数据库,再更新缓存
    • 二、总结

一、解决方案

1.1 先更新缓存,再更新数据库

💣 问题:

数据库更新成功了,但是由于异常或其他原因,导致缓存没有更新成功!

在这里插入图片描述

📝 解决方案
不采用这种方式嘎,哈哈😄

1.2 先删除缓存,再更新数据库

💣 问题:

A线程首先删除了缓存,然后去更新数据库,由于网络的原因或者其他原因导致一直没有更新完成,这个时候呢,来了一个B线程要读取数据,发现缓存没有数据(被A删除了),然后就转向数据库读取,读取完数据以后呢,就把数据放在了缓存(这个时候A还没有更新完数据库),最终呢就导致了缓存中的数据是旧的数据(脏数据),导致了数据不一致性。

在这里插入图片描述

📝 解决方案
延时双删:

延时双删就是MySQL删除缓存以后,更新完数据库,休眠一段时间,然后再删除缓存。考虑性能的原因,我们可以把第二次删除缓存操作,后台新建一个异步线程执行。

在这里插入图片描述

1.3 先更新数据库,再更新缓存

💣 问题:

假如线程正在更新数据库,但是呢A还没有更新完数据库,突然来了一个B线程一次就命中缓存,导致B线程读取到了脏数据;还有一种情况是A线程删除缓存失败了,会导致缓存中的数据是脏数据,而且可能会一直脏下去。

在这里插入图片描述

📝 解决方案

使用阿里中间件:canal,通过订阅MySQL的binlog日志监控MySQL的变化。
canal下载地址:https://github.com/alibaba/canal

在这里插入图片描述

二、总结

1、有个重要的问题是缓存一定要设置过期时间以MySQL为主,这样的好处是,如果缓存过期了,会去数据库查询最新的数据。
2、个人认为不管采用那种方式,都不能百分之百确保缓存一致性,只有最优解,有想法欢迎在评论区留言!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/517408.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解密双十一小程序云背后毫秒级伸缩的Serverless计算平台:函数计算

自2017年第一批小程序上线以来,越来越多的移动端应用以小程序的形式呈现。小程序拥有触手可及、用完即走的优点,这大大减少了用户的使用负担,使小程序得到了广泛的传播。在阿里小程序也被广泛地应用在淘宝/支付宝/钉钉/高德等平台上&#xff…

RuoYi-Cloud 进阶篇_01( Seata 单机环境搭建)

文章目录一、部署单机 TC Server1. 下载Seata2. 解压缩3. 启动4. 监听日志5. 启动命令讲解一、部署单机 TC Server 1. 下载Seata 在https://github.com/seata/seata/releases 这里找到对应的版本软件包进行下载 注:单机模式只适用于学习或者本地测试阶段&#xf…

Logtail 混合模式:使用插件处理文件日志

作为一个服务百万机器的日志采集 agent,Logtail 目前已经提供了包括日志切分、日志解析(完整正则、JSON、分隔符)、日志过滤在内的常见处理功能,能够应对绝大多数场景的处理需求。但有些时候,由于应用的历史原因或是本…

腾讯车联发布TAI3.0:三步实现汽车智能进化,2个月快速上车

6月24日,“2020腾讯智慧出行新品发布会”在线上举行,全新升级的TAI3.0生态车联网正式亮相,并在新款哈弗F7上进行了真实驾车场景的功能展示。 据介绍,TAI3.0包含两个车载APP——腾讯随行和腾讯爱趣听,以及一个生态开放…

RuoYi-Cloud 进阶篇_02( Seata 高可用集群与 Nacos 注册中心整合)

文章目录二、安装步骤1. 创建数据库2. 修改配置文件3. 调整数据库驱动4. 修改配置中心二、 启动和验证2.1. 启动nacos2.2. 启动TC Server2.3. 启动第二个节点2.4. 验证高可用二、安装步骤 1. 创建数据库 创建名称为ry_seata的数据库,并初始化ry_seata_20210128.sql脚本 2.…

腾讯TAD Sim2.0领跑自动驾驶仿真市场 双擎驱动构建新一代仿真平台

随着自动驾驶领域硬件、算法等方面的快速发展,虚拟仿真技术在自动驾驶研发和测试领域的应用日渐广泛,成为自动驾驶量产应用的必备工具,城市智慧交通调度管理和相关法规制定的有力辅助。 在这片行业竞争新高地上,腾讯自动驾驶仿真…

RuoYi-Cloud 部署篇_03(windows环境 Oracle + nginx版本)

请参考RuoYi-Cloud 分布式部署_03(linux环境 Mysqlnginxredis版本)

为了实现在线库的复杂查询,你还在双写吗?

一、在线库不支持在线复杂查询 做在线业务的开发者经常会碰到这样的难题:在线数据库上面运行稍微复杂点的查询,在线业务就挂了!不管是单机数据库如MySQL、PG,还是分布式数据库,HBase、MongoDB、Cassandra都有这个问题…

JUC 中断线程的3种方式

文章目录介绍中断方式一中断方式二中断方式三源码解析总结介绍 三个方法: 1、public boolean isInterrupted()判断线程是否被中断,如果此线程已被中断,则为true ;否则false 。 2、public void interrupt()中断线程 3、public …

RuoYi-Cloud 进阶篇_04( Seata 高可用集群 AT模式 需求实战)

需求背景: 模拟下单场景:首先去在自己的本地创建一条下单记录,同时,还要去调用库存服务,执行减库存操作。 这里演示一个客户下订单的流程服务来为小伙伴们进一步了解一下分布式事务到底如何使用? 首先,我…

基于Tablestore多元索引打造亿量级店铺搜索系统

一、方案背景 对于一套GEO管理系统,其核心点与瓶颈在于数据库的存储性能与查询能力;一方面,存储服务需要应对海量数据的低延迟存、读,另一方面,存储服务也要提供高效的GEO多维度数据检索。表格存储(TableS…

Java中的序列化与反序列化机制

文章目录一、序列化的定义二、为什么需要序列化呢?三、如何序列化四、案列实现4.1、将对象序列化位二进制流4.2 将序列化后的二进制流反序列化为对象五、总结一、序列化的定义 💡 所谓的序列化就是将Java 中的对象转换成一种流的形式(二进制…

今天起,我们喝的百年牛奶要变了!

一天从一杯光明奶开始,是很多小伙伴的日常:牛奶下肚,醇厚、香甜的奶味仍余舌尖。如今,这家百年老字号正在不断焕发新能量。 今天,光明乳业与阿里云达成战略合作。双方将整合优质资源,形成聚合效应&#xf…

Spring 从入门到入土——AOP 就这么简单!| 原力计划

作者| 冢狐责编 | 夕颜出品 | CSDN博客什么是AOP?面向切面编程(Aspect Oriented Programming),通过预编译的方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点&#xff…

RuoYi-Cloud 进阶篇_03( Seata 高可用集群与 NacosConfig配置中心整合)

文章目录1. 创建文件config.txt2. 创建nacos-config.sh3. 配置导入nacos配置中心4. 配置验证1. 创建文件config.txt 在seata的安装文件夹下创建文件config.txt [rootnode2 ~]# cd /app/seata/seata-server-1.4.2/ [rootnode2 seata-server-1.4.2]# vim config.txt 说明&#…

基于 Tracing 数据的拓扑关系生成原理

背景 随着互联网架构的流行,越来越多的系统开始走向分布式化、微服务化。如何快速发现和定位分布式系统下的各类性能瓶颈成为了摆在开发者面前的难题。借助分布式追踪系统的调用链路还原能力,开发者可以完整地了解一次请求的执行过程和详细信息。但要真…

一条命令导出MySQL表结构xls

文章目录🌱介绍🌷一、先尝鲜💘二、导出失败的看过来🐒三、原理🐷总结🌱介绍 🌷一、先尝鲜 🍃执行下面SQL语句,将会发生神奇的事情😁 SELECT 字段名称,数据…

揭秘2019双11背后的云网络 – 双11网络架构和洛神系统

图1 天猫双11成交额 2019年天猫双11成交额,2684亿!核心系统100%上云!全球最大流量洪峰,阿里云扛住了。 狂欢背后的技术栈 网上轻松购物体验实际上是背后复杂的技术组成的,这是一个简化的通用电商系统架构&#xff0…

拿专属内推码!一汽-大众专场直播招聘来了

作者 | 张红月出品 | CSDN遇见OFFER开学即毕业毕业即失业线下宣讲招聘统统被按下了暂停键迷茫,焦虑,惶恐而HR却说,今年招人太难了腾讯总监甚至路边摆摊招聘2020年各大企业纷纷开启线上模式CSDN作为深受开发者喜爱的社区以用户为本特开设遇见O…

vmware workstation 12 打开vm18 不兼容问题解决

由于需要让别人给我发了一下xp系统的虚拟机,可是打开后,却显示:配置文件“”是由VMware产品创建,但该产品与此版VMware workstations 不兼容,因此无法使用。 解决方案: 分析: 出现这种情况主要…