【MySQL数据库事务操作、主从复制及Redis数据库读写分离、主从同步的实现机制】

文章目录

  • MySQL数据库事务操作、主从复制及Redis数据库读写分离、主从同步的实现机制
    • ACID及如何实现
    • 事务隔离级别:
    • MVCC 多版本并发控制
    • MySQL数据库主从复制
    • 主从同步延迟怎么处理
    • Redis 读写分离
      • 1.什么是主从复制
      • 2.读写分离的优点
    • Redis为什么快呢?

MySQL数据库事务操作、主从复制及Redis数据库读写分离、主从同步的实现机制

ACID及如何实现

原子性、一致性、隔离性与持久性

  • 事务的隔离性是通过数据库锁的机制实现的。

  • 事务的一致性由undo log来保证:undo log是逻辑日志,记录了事务的insert、update、deltete操作,回滚的时候做相反的delete、update、insert操作来恢复数据。

  • 事务的原子性持久性由redo log来保证:redolog被称作重做日志,是物理日志,事务提交的时候,必须先将事务的所有日志写入redo log持久化,到事务的提交操作才算完成。

image-20230923193328802

事务隔离级别:

读未提交:当前事务读取时,可以看到其他事务未提交的数据,容易造成脏读;

读已提交:当前事务读取时,可以看到其他事务已提交的数据,在当前事务中可能多次读取的数据不相同,容易造成不可重复读;

可重复读:当前事务读取时,生成一个当前的读取快照,之后的每次读取数据,在快照中读取,但是对于其他事务新插入的数据是可以读到的,容易造成幻读。

串行化:是 4 种事务隔离级别中隔离效果最好的,解决了脏读、可重复读、幻读的问题,但是效果最差,它将事务的执行变为顺序执行,与其他三个隔离级别相比,它就是相当于单线程,后一个事务的执行必须等待前一个事务结束才能执行。

MVCC 多版本并发控制

通过维护数据历史版本,从而解决并发访问情况下的读一致性问题。

READ COMMITTED 是每次读取数据前都生成一个ReadView,这样就能保证自己每次都能读到其它事务提交的数据;

REPEATABLE READ 是在第一次读取数据时生成一个ReadView,这样就能保证后续读取的结果完全一致。

MySQL数据库主从复制

  1. master数据写入,更新binlog
  2. master创建一个dump(转存)线程向slave推送binlog
  3. slave连接到master的时候,会创建一个IO线程接收binlog,并记录到relay log中继日志中
  4. slave再开启一个sql线程读取relay log事件并在slave执行,完成同步
  5. slave记录自己的binglog

image-20230923191820471

主从同步延迟怎么处理

主从同步延迟的原因

一个服务器开放N个链接给客户端来连接的,这样有会有大并发的更新操作, 但是从服务器的里面读取 binlog 的线程仅有一个,当某个 SQL 在从服务器上执行的时间稍长 或者由于某个 SQL 要进行锁表就会导致,主服务器的 SQL 大量积压,未被同步到从服务器里。这就导致了主从不一致, 也就是主从延迟。

主从同步延迟的解决办法

解决主从复制延迟有几种常见的方法:

  1. 写操作后的读操作指定发给数据库主服务器

例如,注册账号完成后,登录时读取账号的读操作也发给数据库主服务器。这种方式和业务强绑定,对业务的侵入和影响较大,如果哪个新来的程序员不知道这样写代码,就会导致一个bug。

  1. 读从机失败后再读一次主机

这就是通常所说的 “二次读取” ,二次读取和业务无绑定,只需要对底层数据库访问的 API 进行封装即可,实现代价较小,不足之处在于如果有很多二次读取,将大大增加主机的读操作压力。例如,黑客暴力破解账号,会导致大量的二次读取操作,主机可能顶不住读操作的压力从而崩溃。

  1. 关键业务读写操作全部指向主机,非关键业务采用读写分离

例如,对于一个用户管理系统来说,注册 + 登录的业务读写操作全部访问主机,用户的介绍、爰好、等级等业务,可以采用读写分离,因为即使用户改了自己的自我介绍,在查询时却看到了自我介绍还是旧的,业务影响与不能登录相比就小很多,还可以忍受。

还有:

1、优化网络环境:主从复制时,减小主从服务器之间网络延迟对数据库同步的影响。可以考虑优化网络之间连接的带宽、增加从库的硬件性能等。

2、增加从库数量:增加从库数量可以增加数据同步的速度和可靠性,同时也能减少每个从库的负担,提高从库响应速度。

3、调整数据库相关参数:可以调整一些MySQL数据库中的相关参数,比如调整binlog格式、binlog缓冲区大小、innodb_flush_log_at_trx_commit等参数,采用半同步模式,以加快数据的同步速度。

4、分区数据库:将数据库分成多个区,每个从库只复制自己所需要的数据区,可以有效的减少排队堵塞、网络传输等方面的延迟问题。

综上所述,优化网络环境、增加从库数量、调整数据库相关参数、分区数据库等方法可以有效的降低MySQL主从复制模式的延迟。

Redis 读写分离

1.什么是主从复制

主机数据更新后根据配置和策略,自动同步到备机的Master/Slaver,Master 以写为主,Slave以读为主

主从复制,是指将一台 Redis 服务器的数据,复制到其他的 Redis 服务器。前者称为 主节点(master),后者称为 从节点(slave)。且数据的复制是 单向 的,只能由主节点到从节点。Redis 主从复制支持 主从同步从从同步 两种,后者是 Redis 后续版本新增的功能,以减轻主节点的同步负担。

从复制主要的作用?

  • 数据冗余: 主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
  • 故障恢复: 当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复 (实际上是一种服务的冗余)
  • 负载均衡: 在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务 (即写 Redis 数据时应用连接主节点,读 Redis 数据时应用连接从节点),分担服务器负载。尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高 Redis 服务器的并发量。
  • 高可用基石: 除了上述作用以外,主从复制还是哨兵和集群能够实施的 基础,因此说主从复制是 Redis 高可用的基础。

2.读写分离的优点

1.读写分离,性能提高
2.容灾快速恢复

Redis为什么快呢?

Redis的速度⾮常的快,单机的Redis就可以⽀撑每秒十几万的并发,相对于MySQL来说,性能是MySQL的⼏⼗倍。速度快的原因主要有⼏点:

  1. 完全基于内存操作
  2. 使⽤单线程,避免了线程切换和竞态产生的消耗
  3. 基于⾮阻塞的IO多路复⽤机制
  4. C语⾔实现,优化过的数据结构,基于⼏种基础的数据结构,redis做了⼤量的优化,性能极⾼

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

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

相关文章

Docker初识

什么是Docker 微服务虽然具备各种各样的优势,但服务的拆分通用给部署带来了很大的麻烦。 分布式系统中,依赖的组件非常多,不同组件之间部署时往往会产生一些冲突。在数百上千台服务中重复部署,环境不一定一致,会遇到…

Matlab图像处理-模式识别

模式识别 模式识别就是用计算的方法根据样本的特征将样本划分到一定的类别中去。模式识别就是通过计算机用数学技术方法来研究模式的自动处理和判读,把环境与客体统称为“模式”。模式识别以图像处理与计算机视觉、语音语言信息处理、脑网络组、类脑智能等为主要研…

题目 1063: 二级C语言-统计字符

输入一行字符&#xff0c;分别统计出其中英文字母、空格、数字和其它字符的个数。 样例输入a 1, 样例输出 1 1 1 1 鉴于直接用cin会导致空格无法录入&#xff0c;于是用string的getline函数。 再在对应区间的计数器1就好 #include<iostream> #include<string> …

【每日一题】436. 寻找右区间

436. 寻找右区间 - 力扣&#xff08;LeetCode&#xff09; 给你一个区间数组 intervals &#xff0c;其中 intervals[i] [starti, endi] &#xff0c;且每个 starti 都 不同 。 区间 i 的 右侧区间 可以记作区间 j &#xff0c;并满足 startj > endi &#xff0c;且 startj…

【每日随笔】驾驭人性 ③ ( 胡萝卜 - 用利益让员工离不开你 | 大棒 - 用规则让员工害怕你 | 如何建立制度规则 )

文章目录 一、胡萝卜 - 用利益让员工离不开你二、大棒 - 用规则让员工害怕你三、如何建立制度规则 一、胡萝卜 - 用利益让员工离不开你 上一篇博客 【每日随笔】驾驭人性 ② ( 员工立场问题 | 立场转变 | 吴越同舟 | 老板如何与员工结成利益共同体 ) 中 提到了 , 用利益让员工离…

十几张高清世界地图

十几张高清世界地图 仅供学习&#xff01;

pom.xml中解决“vulnerable dependency maven:org.yaml:snakeyaml:1.33“警告问题

问题 当我们引入依赖的时候&#xff0c;pom文件会有这样的提示&#xff0c;其大概的意思就是 maven:org.yaml:snakeyaml:1.30"表示通过Maven引入了一个潜在的安全漏洞依赖项"org.yaml:snakeyaml:1.30" 解决办法 其实我们就是要更改这个依赖的版本&#xff0c…

PB转纯BS工具

pbtoweb Convert Powerbuilder UI to web Automatically. 源码地址&#xff1a;GitHub - pcwe2002/pbtoweb: automatically convert Powerbuilder UI to web 支持转换控件 Window DataWindow CommandButton CheckBox RadioButton Tab DropdownListbox StaticText EditMask S…

有效保护敏感数据的最佳实践

在当今数据驱动的环境中&#xff0c;数据就是力量&#xff0c;组织仍然高度关注如何利用其数据进行 BI、分析和其他业务驱动计划。 事实上&#xff0c;最近的研究表明&#xff0c;数据领导者的主要动机是对高质量分析洞察的需求&#xff0c;而不是合规性。 然而&#xff0c;…

eNSP基础网络学习-v02

一、eNSP 1.什么是eNSP eNSP(Enterprise Network Simulation Platform)是一款由华为提供的免费的、可扩展的、图形化操作的网络仿真工具平台&#xff0c;主要对企业网络路由器、交换机进行软件仿真&#xff0c;完美呈现真实设备实景&#xff0c;支持大型网络模拟&#xff0c;让…

git reset origin --hard解决‘Your branch is ahead of ‘origin/xxxx‘ by xx commit.’

git reset origin --hard解决‘Your branch is ahead of origin/xxxx by xx commit.’ 如图&#xff1a; 之前是这么解决的解决git&#xff1a;Your branch is ahead of ‘XXX‘ by X commits-CSDN博客git删除/撤销远已经push到程服务器上某次代码提交场景&#xff1a;不小心把…

忽视日志吃大亏,手把手教你玩转 SpringBoot 日志

一、日志重要吗 程序中的日志重要吗&#xff1f; 在回答这个问题前&#xff0c;笔者先说个事例&#xff1a; ❝ 笔者印象尤深的就是去年某个同事&#xff0c;收到了客户反馈的紧急bug。尽管申请到了日志文件&#xff0c;但因为很多关键步骤没有打印日志&#xff0c;导致排查进…

K8S:pod集群调度及相关操作

文章目录 一.pod集群调度概念1.调度约束( List-Watch组件)2.List-Watch的工作机制&#xff08;1&#xff09;List-Watch的工作机制流程&#xff08;2&#xff09;List-Watch的工作机制图示 3.调度的过程&#xff08;1&#xff09;调度的任务&#xff08;2&#xff09;调度选择p…

vue3项目发布后修改配置文件仍然生效

使用json&#xff0c;并且要用ajax来加载&#xff1b;应用过程中也有一些注意的问题。 有关“vue3项目发布后修改配置文件仍然生效”问题&#xff0c;之前做过一篇笔记《vue项目读取全局配置》。但事实上&#xff0c;那篇笔记的步骤&#xff0c;只解决了项目发布后&#xff0c…

【工具插件类教学】三种常用日期选择UI控件工具

目录 一. DataPicker的简介 二. DateTimePicker的简介 ​三. FlatCalendar的简介 一. DataPicker的简介 一种是常显,一种是按钮控制显示逻辑,可以设置年,月,日。并输出结果

Ubuntu 22.04 快速安装 MySQL 数据库 8.0

Ubuntu 22.04 快速安装 MySQL 数据库 8.0 1. 安装 MySQL2. 配置 MySQL2.1 公网访问2.2 添加用户2.2.1 切换 root 用户2.2.2 链接 MySQL2.2.3 添加新的 MySQL 用户2.2.4 退出 MySQL2.2.5 退出 root 用户 2.3 测试新用户 1. 安装 MySQL sudo apt install mysql-server-8.02. 配置…

【Vue3 源码解析】reactive 全家桶

// 泛型约束&#xff1a;只能传入引用类型 export function reactive<T extends object>(target: T): UnwrapNestedRefs<T> // 判断只读&#xff0c;否则创建reactive响应式对象 export function reactive(target: object) {// if trying to observe a readonly pr…

求生之路2服务器搭建插件安装及详细的游戏参数配置教程windows

求生之路2服务器搭建插件安装及详细的游戏参数配置教程windows 大家好我是艾西&#xff0c;最近研究了下 l4d2&#xff08;求生之路2&#xff09;这款游戏的搭建以及架设过程。今天就给喜欢l4d2这款游戏的小伙伴们分享下怎么搭建架设一个自己的服务器。毕竟自己当服主是热爱游…

Unity Bolt 实现UI拖拽功能

最近在学习使用Bolt插件实现五代码对UGUI Image元素实现拖拽。先看效果 录制_2023_09_15_17_50_45_29 下面是实现方式介绍&#xff1a; 1&#xff1a;注册RectTransformUtility 在使用Bolt插件实现UI拖拽的功能&#xff0c;需要使用 RectTransformUtility.ScreenPointToLoca…

数据分析总结

数据分析 AB检测 AB检测&#xff0c;也称为AB测试&#xff0c;是一种在线实验的方法&#xff0c;用于比较两个或多个版本的网页或应用程序的效果&#xff0c;以确定哪个版本能够更好地实现预期的目标&#xff0c;例如提高用户转化率、点击率、留存率等。AB检测的流程大致如下…