mysql与redis数据一致性问题相关面试题

news2024/11/19 5:30:06

1、mysql 与 redis 如何保证数据一致性问题

1. 更新 mysql 数据,在手动清除 Redis 缓存 ,在重新查询最新的数据同步到Redis 中

伪代码:
判断如果 redis 是为空的 则读取 mysql
同步到 redis 中
setRedis(key,mysql 数据)

2.更新 mysql 数据,在采用 mql异步的形式 同步数据到 Redis 中;

缺点:延迟概率就比较大
优点:解耦

3.基于订阅 mysql binlog 采用 mq 异步的形式将数据同步到 Redis 中;

4.订阅 mysql binlog 文件 异步的形式同步到 redis 中(canal 框架)

5. 延迟双删策略或者(双写)

2、mysql 与 redis 同步数据是否存在延迟呢?

数据同步过程中,会存在短暂的延迟,这属于正常的现象。
在分布式架构中很难实现数据强一致性
弱一致性: 主从之间数据允许不一致性;
强一致性: 主从之间数据必须一致性; 如果实现 成本是非常高,会设计到一些锁的技术,
最终一致性:短暂的数据延迟是允许的,但是最终数据是需要一致; ---在分布式中做数据同步需要经过网络传输的,网络传输数据需要一定的时间,所以数据短暂的延迟是允许的,但是最终数据一定达成一致。
延迟是很难避免的,优化 减少延迟的时间。
公司中数据 同步延迟 优化在 10-30 毫秒。

3、canal 解决 mysql 与 Redis 数据同步原理

1.canal 伪装成 mysql 从节点 订阅 mysql 主节点的 binlog 文件;
2. 当我们的 mysql 主节点 binlog 文件发生了变化,则将该 binlog 文件发送给 canal 服务器端;
3.canal 服务器端将该 binlog 文件二进制转化成 json 格式给 canal 客户端;
4.canal 客户端在将该数据同步到 Redis/ES;

4、说说延迟双删策略原理

1. 先删除缓存,在更新 DB 在高并发的情况下 其他线程可能读取缓存为 null 值,将 db 旧的数据在同步到缓存中。

1.t1 线程先删除缓存;
2.t2 线程读取缓存为 null,同步 db 数据到缓存中;
3.t1 线程更新 db 中的数据;
4.t3 线程查询缓存中数据是旧数据;

如何解决该问题:延迟双删策略
t1 线程更新完 DB 后,让它 sleep 一段时间,再删除缓存 ;
延迟双删缺点就是 第二次删除缓存时间很难控制---不推荐

5、什么是如何双写一致性问题

1.更新完 db 后,同步更新 Redis; 更新 db 操作与更新 redis 操作 是一样的,不是 直接删除 Redis 缓存 key 俗称:双写

 

t1 和 t2 线程 同时对 db 数据做修改操作,同时需要更新 redis 缓存。
但是在同时更新 redis 缓存过程中 ,会存在顺序执行问题,导致数据不一致。

6、谈谈双写一致性的优缺点

1.分布式锁解决多个线程同时执行双写业务逻辑,最终只会有一个获取到分布式锁线程才可以执行,没有获取到分布式锁线程则阻塞等待,这样确保线程执行双写 不会被其他线程干扰,但是效率非常低;
2.mysql 行锁实现 ,多个线程同时获取行锁,最终只会有一个线程获取行锁成功,获取行锁成功的线程 如果更新 Redis 成功,就可以提交事务,如果更新 redis 失败可以采用重试策略,重试多次更新到 redis 还是失败的话,直接回滚事务,同时释放行锁,行锁-----提交或者回滚事务。 但是效率非常低;不推荐

 7、如何在集群中,保证我们的定时任务只会触发一次

1.将业务逻辑和定时任务逻辑完全分开部署,实现解耦、只对业务逻辑实现集群,不对我们的定时任务逻辑集群;---定时任务单机版本 缺点无法实现高可用的问题;
2.对我们 Jar 包加上一个开关,项目启动的时候读取该开关 如果为 true 的情况下则加载定时任务类,否则情况下就不加载该定时任务类;--效率非常低;
3.在数据库加上一个主键能够创建成功,则触发定时任务,否则就不触发定时任务, 高可用的问题;
4.分布式锁实实现,只要 jar 能够拿到分布式锁就能够执行定时任务,否则情况下不执行;以上的方案都是属于规模比较小的项目,在微服务架构中应该采用分布式任务调度平台。

定时任务可以集群的执行,但是 重要条件。
每个定时任务 跑批数据范围 是不一样 ---可以跑批效率。

8、分布式任务调度平台架构原理

将定时任务代码与业务代码分开部署。
1.定时任务代码集群运行,注册到注册中心上,在通过调度中心触发定时任务,先去注册中心获取定时任务接口,在通过负载均衡算法 发送请求给具体定时任务执行定时任务。
2. 如果我们定时还是单机版本,执行定时任务效率很低,所有我们的定时还是会集群执行只是通过分片的方式。 也就是调度中心会给定时任务发送请求传递一个不同的值。例如:定时任务 1 为 index 0 定时任务 2 为 index=1 定时任务 3 为 index=3 实际该 index 值
就是定时任务注册到注册中心上存放的 index 位置,定时任务在根据不同的 index 值查询自己需要跑批的数据。

9、Xxljob 与 elastic-job

Xxljob 自己内部注册注册中心,而 elastic-job 是基于 zk 实现注册中心整体思想是差不多的。
元原生架构、ddd 服务网格
Springboot 3.0 依赖 jdk? 17
2025-2028
分布式架构---SOA 服务---微服务
----云原生 jdk17 jdk8 jdk25-30

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

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

相关文章

法律常识(二)婚姻法解读

目录 参考 [重婚]禁止有配偶者与他人同居 [有配偶者与他人同居] [家庭暴力] 实践中对于借婚姻索取财物一般如何处理? 索要“彩礼”是否是婚姻法所禁止的行为? 实践中因夫妻一方…

【GD32F427开发板试用】多路ADC规则组同时采样 DMA进行传输数据 顺带开启FPU浮点运算

本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动,更多开发板试用活动请关注极术社区网站。作者:Hello_eQN7e7 前言 开启浮点运算 加快浮点类型数据计算使用GD32F427V-START开发板的ADC1采样四路电路使用DMA1进行数据实时搬运至内存读出数据…

Spark RDD 转换算子

文章目录Spark RDD 转换算子一、Value 类型1、map (映射)2、 mapPartitions (map优化缓冲流)(1)函数说明(2) 代码示例(2)小案例获取每个分区的最大值3、 map 和 mapParitions 的区别4、 mapParitionsWithIndex(1) 小案例只获取第二个分区的最大值(2&…

开工干活累了,晚上不得找个陪玩打打游戏?我教你们用python找个人美声甜的

序言 好兄弟们,陪玩大家多少都知道亿点吧! 漂亮妹妹超级多,长得又好看,还会萝莉音御姐音,滋溜~ 就是说,今天来带咱们来爬爬陪玩的数据,一起看看行情咋样~ 工欲善其事,必先利其器…

使用CyberController来将旧手机改造成电脑外挂

这个是我在哔哩哔哩中发现的感觉比较实用在这里发表一下使用过程中的问题和见解 原作者视频旧手机改电脑外挂-效率或将“提升300%?”_哔哩哔哩_bilibili 参考视频旧手机改电脑外挂,简陋的参考视频_手机游戏热门视频 (bilibili.com) 感谢这两位博主 这个是…

Java十大经典排序算法

目录1. 插入类排序1.1 直接插入排序1.2 希尔排序2. 选择类排序2.1 直接选择排序2.2 堆排序3. 交换类排序3.1 冒泡排序3.2 快速排序(递归)3.2.1 快排的优化3.3 快速排序(非递归——栈)4. 归并类排序4.1 二路归并排序(递…

管理者必备的六大复盘方法工具汇总

无论是对于企业还是个人来说,复盘都是一个能让我们快速成长的方法,尤其是项目经理和PMO,你是带领项目团队的,每一次项目的完成,都有很多经验,俗话说,最大的浪费是经验的浪费!复盘的作…

基础IO-文件操作函数,文件描述符,理解缓冲区

文章目录基础IO回顾c语言的文件操作函数操作系统的文件操作函数open—打开文件write—写入文件read—读文件内容感性现象理解文件文件描述符fd文件描述符的分配规则重定向重定向函数dup2输出重定向追加重定向输入重定向再次理解文件理解缓冲区感性理解缓冲区缓冲区刷新策略写一…

新的一年,建议尝试下这7个JavaScript 库

常言道“你不必重新发明轮子”。第三方库它可以帮助您以简单的方式编写复杂且耗时的功能,一个好的项目应当使用一些优秀的库,下面我推荐下,在你的下个项目中,建议用上这7 个有用的库。1、Video.jsVideo.js 是一个基于 HTML5 的视频…

跑步用挂脖耳机好还是无线耳机、公认最好的跑步耳机推荐

蓝牙耳机近几年受到市场的欢迎,种类越来越多,各类功能也日益五花八门,消费者很难准确的进行分辨,一不小心可能买到华而不实的产品。现在了解一下值得入手的蓝牙耳机,从多个角度对蓝牙耳机进行评估后,得出以…

互联网导航系统——DNS:《流浪地球2》中重启互联网的现实解读

《流浪地球2》展现了一个浩大的宇宙级工程:宏大壮观的万座行星发动机、拥有超强算力的量子计算机、连接天地的太空电梯……这些“硬科技”让观众大开眼界。 电影中刘德华饰演的图恒宇能否重启互联网根服务器是拯救地球任务的关键。互联网可以重启吗?现实…

Array.prototype.sort()排序,升降排序使用方法

sort() 方法对数组中的元素进行适当排序并返回数组。这种情况不一定稳定。默认排序顺序根据字符串 Unicode 代码点。 目录 升序降序排序法 对象可以按照某个属性排序 const months [March, Jan, Feb, Dec] months.sort() // [Dec, Feb, Jan, March] console.log(months) // …

聊聊GC是如何快速枚举根节点的

本文已收录至Github,推荐阅读 👉 Java随想录 世界上最快乐的事,莫过于为理想而奋斗。——苏格拉底 文章目录什么是根节点枚举根节点枚举存在的问题如何解决根节点枚举的问题安全点安全区域HotSpot使用的是可达性分析算法,该算法需…

ssm高校大学校园租赁平台的设计与实现java

当今社会,信息技术发展快速。同时,随着生活水平提高,学生有了更大的购买力,这就使得闲置物品增多,校园里物品更新快,使用周期短。而且传统的校园租赁平台,已经不能够满足学生的需求。学院校园租…

人工智能识别图片食物

一、准备食物图片(橘子和苹果)二、识别学习关键代码编写public static void study() throws Exception {//学习Picture picture new Picture();//图片解析类 图片(文件)-三通道矩阵Config config new Config();//现有的环境业务…

一文了解WebSocket及Springboot集成WebSocket

文章目录WebSocket是什么WebSocket通信原理和机制WebSocket协议是什么WebSocket协议和Http协议有什么区别WebSocket常用在那些场景Springboot集成WebSocketpom依赖java相关代码configcomponenthtml代码页面访问效果WebSocket是什么 🍊WebSocket是一种网络通信协议&…

Linux C编程

编写C代码 编辑器:vim,编写.c文件 编译 gcc 源文件 -o 生成可执行文件名 gcc -c:只编译,不链接,生成.o文件 make工具和Makefile文件 make工具:GNU make,是一个文件,用于将源代…

【CANoe示例分析】EthernetCanGW_Test_CN

1、工程路径 此示例工程来自于Vector官网:EthernetCanGW_Test_CN 感兴趣的可以自行下载! 2、示例目的 如何在CANoe中创建一个网关,实现转发以太网报文到多个CAN网络中。该使用案例是对CAN网络进行压力测试 3、示例内容 本示例通过执行Test Module里的测试用例Bus_load…

《电路/电路原理》—戴维宁(南)定理实战演练

前言战前准备什么是戴维南定理?戴维南定理(Thevenins theorem)标准解释:含独立电源的线性电阻单口网络N,就端口特性而言,可以等效为一个电压源和电阻串联的单口网络。电压源的电压等于单口网络在负载开路时…

CSS预处理器、移动端适配

1、预处理器概念 1.1、CSS编写的痛点 CSS作为一种样式语言, 本身用来给HTML元素添加样式是没有问题的。 但是目前前端项目已经越来越复杂, 不再是简简单单的几行CSS就可以搞定的, 我们需要几千行甚至上万行的CSS来完成页面的美化工作。 随着代码量的增加, 必然会造成很多的…