Redis和数据库数据不一致该怎么做?

news2024/11/23 20:48:30

Redis和数据库数据不一致该怎么做?

答:

情景:redis作为缓存,当我们修改数据库的数据的时候,会出现Mysql和redis的数据不一致的问题
在这里插入图片描述
如图,当修改更新MYSQL数据为9后,还没来得及取更新redis,这时候取查询redis为10,出现数据不一致的问题。

  • 解决方案
  1. 先更新数据库,再更新缓存。。。(这种方式是不行的,还是会出现上述的问题)
  2. 先删除缓存,再更新数据库。
    还是会出现数据不一致的情况,当删除了redis,还没来得及写入mysql时,这时候查询redis没有从数据库获取并写入redis为10,之后才更新的数据库9,还是出现不一致的情况。
  3. (缓存延时双删):先删除缓存,再更新数据库,再延迟删除缓存
    为什么要延时?第一次删除缓存之后,更新数据库之前,他查询了数据库,如果他查询返回的时间比较久,导致回写redis时候是在第二次删除缓存之后,那么第二次删除缓存就没有意义,删除了空。最后回写的是更新前的数据,导致删不掉。所以我们延时的目的是要保证在构建缓存操作完毕后再去删除。
    缺点:因为有延时操作,会造成服务器阻塞,不适合高并发,不能达到最大的吞吐性能。
  4. 最终一致性(redis和mysql现在不一致,但是要求过一会和最终要一致)
    先更新mysql,然后删除redis里面的缓存,要注意的是确保redis一定要删除成功,利用消息队列的重试+手动确认的机制来删除redis的数据,如果删除redis缓存失败的情况下,再发送一个消息到mq,然后再写个程序去消费mq里面的消息,只要我删除成功就确认,没有删除成功就利用消息队列的重试机制,不断的删除,直到删除成功为止。。问题:对程序的耦合性比较高,修改和新增接口,每一个方法里面都要加发消息的操作,很麻烦。
    有一种低耦合的解决方案,就是canal,原理是把自己伪装成mysql的从机,然后不断的去监听mysql的二进制日志文件,当我们数据发生变化的时候,他会主动的给我们的mq发送一个消息,所以就不用在每个修改新增方法的代码里面将发消息的代码写出来了,这个操作就交给canal去实现了

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

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

相关文章

linux系列小知识-手把手教你SSH怎么链接

目录 项目场景: 问题描述 原因分析: 解决方案: 项目场景: 应用场景:在机器装机后,如果没有显示,有没有串口,通常很难区操作调试,本文总结一篇通过搭建SSH链接去为调试…

操作符讲解2---C语言

目录 前言: 1.赋值操作符 2.单目操作符 2.1取地址操作符 2.2sizeof操作符 2.3和-- 3.关系操作符 4.条件表达式和逗号表达式 4.1条件表达式 4.2逗号表达式 5.下标引用&函数调用&结构访问 6.表达式与语句的关系 ❤博主CSDN:啊苏要学习 ▶专栏分类…

跨境电商卖家,如何运营Facebook?

随着跨境电商的兴起,越来越多的卖家开始运营Facebook,以吸引更多的潜在客户和提高品牌知名度。那么,作为跨境电商卖家,我们可以在Facebook上做些什么呢? 首先,我们可以通过Facebook建立一个专业的品牌页面&…

测试岗人员转型已是必然选择:我的十年自动化测试经验分享

目录 做测试十多年,有不少人问过我下面问题: 第一阶段:初级测试工程师 第二阶段:中级测试工程师 第三阶段:高级测试工程师/测试组负责人 第四阶段: 测试专家/测试经理 升华阶段(老手后5年—10年) 提…

搞怪独特的520文案表情包分享来啦

1. 你宁愿做狗也不和我表白,这个仇我记下了。 2. 这个夏天我不再是单身狗,请叫我热狗。 3. 我以为520是什么日子呢,特意去查了下史书,520是农历的四月初六潘金莲毒死武大郎的日子。 4. 520 你跟她过吧,我没借到钱&…

经常说的数据仓库,是如何存储数据的

一、 什么是数据仓库? 数据仓库(Data Warehouse),简称DW。数据仓库顾名思义,是⼀个很⼤的数据存储集合,出于企业的分析性报告和决策⽀持⽬的⽽创建,对多样的业务数据进⾏筛选与整合。它能为企业提供⼀定的BI&#xff…

CVPR 2023 | EfficientViT:让ViT在多个部署场景实现实时推理

随着近两年来对视觉Transformer模型(ViT)的深入研究,ViT的表达能力不断提升,并已经在大部分视觉基础任务 (分类,检测,分割等) 上实现了大幅度的性能突破。 然而,很多实际应用场景对模型实时推理…

从零入门激光SLAM(十)——刚体位姿表达与优化

大家好呀,我是一个SLAM方向的在读博士,深知SLAM学习过程一路走来的坎坷,也十分感谢各位大佬的优质文章和源码。随着知识的越来越多,越来越细,我准备整理一个自己的激光SLAM学习笔记专栏,从0带大家快速上手激…

django ORM框架 第三章 关联表的数据创建与查询

一、背景: 创建一组一对多的表。 # 班级表 class Class(models.Model):class_id models.IntegerField(primary_keyTrue, verbose_name班级id, help_text班级id)class_name models.CharField(max_length20,verbose_name班级名称, help_text班级名称)# 学生信息表 …

Centos虚拟机与window共享文件夹

1.安装完centos系统后,查看是否安装好VMware tools 如果未安装,请参考此文章安装: CentOS安装VMwareTools_centos安装vmware tools_Sunqk5665的博客-CSDN博客 2.添加共享文件夹 3.使用vmware-hgfsclient查看共享文件夹。本例中为share 4. 挂…

5.1 标准IO介绍及缓冲区

目录 标准I/O介绍 文件的概念和类型 标准I/O-流(可理解为数据) 流的缓冲类型 标准I/O——stdin,stdout,stderr 标准I/O介绍 在寄存器中的输入输出标准,在任何系统上可运行,是一系列的接口,所以被称为标准IO lin…

学会ECharts 数据缩放组件

本文首发自「慕课网」(imooc.com),想了解更多IT干货内容,程序员圈内热闻,欢迎关注"慕课网"或慕课网公众号! 作者:范文杰_fe|慕课网讲师 在一个数据图表中,可能由于数据所表…

Mtlab基础(十):极限的求解

在做研究的过程中,需要涉及到极限的求解,面对简单的极限大家都能够轻松解决,但是当面临复杂的问题时,传统的差分进化算法就难以解决了。 对于求解极限,Matlab提供了非常好的工具**limit**,具体的使用方法: limit(f,v,a)-------------------------------------------…

RFID在空调装配中的作用

RFID在空调装配中的作用 随着物联网和射频识别技术 (RFID) 的发展,越来越多的应用开始使用 RFID 技术来提高生产效率和产品质量。在空调装配过程中,RFID 技术可以发挥重要作用。 RFID 技术可以帮助空调制造商提高装配效率。使用 RFID 技术,…

CircuitBreaker Resilience4J 介绍

最近接触到了CircuitBreaker Resilience4J ,网上查了查资料,这里整合记录一下,供大家学习和参考 目录 前言 1、熔断器出现背景 ​​​​​​​ 2、支持断路器实现有以下几种 3、Circuit Breaker原理 4、概念说明 限流 — RateLimiter …

CPU Architecture

CPU Architecture [/ˈɑːrkɪtektʃər/] 指令集架构 (Instruction Set Architecture)精简指令集处理器 RISC (Reduce Instruction Set Computer)复杂指令集处理器 CISC (Complex Instruction Set Computer) CPU按指令集架构分类ARM运行模式非特权模式…

什么是NTFS for Mac?2023新版本如何下载

在NTFS for Mac中包含了多种功能操作,促进软件更好地使用,可以进行全局设置,也可以针对某一各挂载的磁盘进行针对性设置。 本集小编主要向大家介绍它包含的一些基本功能,看看这款mac读写工具能够实现那些功能,全面了解…

安科瑞电能表对于预付费平台的费控策略应用

安科瑞 徐浩竣 江苏安科瑞电器制造有限公司 zx acrelxhj 摘要:基于智能电能表的预付费系统平台可以实现对预付费客户的适时算费、远程费控和服务。预付费系统的费控策略包括算费子策略、催费预警提醒子策略、欠费停电子策略,介绍3个子策略的制定原则、设计流程&…

Flink学习——状态编程

目录 一、Flink中的状态 二、状态编程 (一)ValueState案例——判断传感器的数据 1.代码实现 2.端口进行传输数据 3.运行结果 (二)ListState (三)MapState案例——比较学生每次考试成绩 1.代码实现 2.端口传输学生成绩 3.运行结果 (四)ReducingState 一、Flink中的状…

0Ω的电阻作用

0欧姆电阻即电阻标值为0欧姆的电阻,多用于PCB设计等方面,是一种理想电阻。那0欧姆电阻是表示没有电阻吗?当然不是,0欧姆电阻的阻值不是0欧姆,只是接近0欧姆。 1、调试方便或者兼容设计:可以选择器件、功能…