【Redis入门到精通八】Redis事务与MySQL事务对比

devtools/2024/10/18 19:23:56/

目录

事务

1.MySQL中事务的特性

2.Redis事务与MySQL事务的区别

3.Redis事务操作演示


事务

        什么是事务呢?事务的概念其实就是把一系列操作绑定成一组,让这一组操作能够批量执行,不过在MySQL中有复杂的机制能够保证这一组操作执行并且一定能成功执行,否则就一条也执行不了,但是Redis中的事务就没有这么靠谱,它只负责把操作绑在一起,如果其中有执行失败的操作,事务无法自动回滚。

1.MySQL中事务的特性

MySQL中事务具有四大特性(ACID)分别是原子性,一致性,隔离性,持久性。

  1. 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。
  2. 一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。
  3. 隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。、
  4. 持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。

MySQL基于事务的隔离性,还延伸出来了三种事务的隔离级别,分别是脏读,不可重复读,幻读从上到下隔离级别越来越高,相应的性能开销也越来越大。

2.Redis事务与MySQL事务的区别

Redis中事务和MySQL事务的区别:

  1. 弱化的原⼦性: redis 没有 "回滚机制". 只能做到这些操作 "批量执⾏". 不能做到 "⼀个失败就恢复到初始状态".
  2. 不保证⼀致性: 不涉及 "约束". 也没有回滚. MySQL 的⼀致性体现的是运⾏事务前和运⾏后 , 结果都是合理有效的, 不会出现中间⾮法状态.
  3. 不需要隔离性: 也没有隔离级别, 因为不会并发执⾏事务 (redis 单线程处理请求) .
  4. 不需要持久性: 是保存在内存的. 是否开启持久化, 是redis-server自己的事情, 和事务⽆关.
        Redis 事务本质上是在服务器上搞了⼀个 "事务队列". 每次客⼾端在事务中进⾏⼀个操作, 都会把命令先发给服务器, 放到 "事务队列" 中(但是并不会立即执行),而是会在真正收到 EXEC 命令之后, 才真正执行队列中的所有操作.

3.Redis事务操作演示

使用multi开启一个事务,执行成功返回OK,并写入一系列操作使用exec执行这些操作。

每次添加⼀个操作,都会提示 "QUEUED",说明命令已经进⼊客⼾端的队列了。真正执行 EXEC 的时候,客⼾端才会真正把上述操作发送给服务器。此时就可以获取到上述 key 的值了。
倘若出现下列情况我们在队列中加入了一个非法语句,这时这个事务操作便无法正常执行操作。

此时我们可以使用discard命令来放弃当前事务,此时直接清空事务队列,之前的操作都不会正常执行。 

在执⾏事务的时候,如果某个事务中修改的值,被别的客⼾端修改了,此时就容易出现数据不⼀致的问题。这时Redis为我们提供了watch操作,在执行multi操作之前执行watch key。
  • 当开启事务的时候, 如果对 watch 的 key 进⾏修改, 就会记录当前 key 的 "版本号"。 (版本号是个简单的整数, 每次修改都会使版本变⼤. 服务器来维护每个 key 的版本号情况)。
  • 在真正提交事务的时候,如果发现当前服务器上的 key 的版本号已经超过了事务开始时的版本号,就会让事务执⾏失败。(事务中的所有操作都不执行)。

在执行事务前我们也可以通过unwatch操作来取消对key的监控。 

❤️😍😍😍😍😍😍😍😍😍😍😍😍😍😍😍😍😍

🍔我是小皮侠,谢谢大家都能看到这里!!

🦚主页已更新Java基础内容,数据结构基础,数据库,算法

🚕未来会更新Java项目,SpringBoot,Redis以及各种Java路线会用到的技术。

🎃求点赞!求收藏!求评论!求关注!

🤷‍♀️谢谢大家!!!!!!!


http://www.ppmy.cn/devtools/118116.html

相关文章

Python | 第五章节 | 进制

P40 标识符 2024/8/15 1、Python对各种变量、函数和类等命名时使用的字符序列称为标识符 2、凡是自己可以起名字的地方都叫标识符num1 90 一、标识符的命名规则 1、由26个英文字母大小写,0-9 ,_组成 2、数字不可以开头 3、不可以使用关键字,但能包含关键字 4、Pyth…

新React v19特性

服务器组件(RSC):经过多年的开发,React 引入了服务器组件,而不是需要借助Next.js 动作(Action):Action也将彻底改变我们与 DOM 元素的交互方式。 增强的 hooks:引入了很多新 hooks,将改变我们的编码体验。…

社团周报系统可行性研究-web后端框架对比-springboot,django,gin

对于目前市面上web后端框架,我主要了解到的就是springboot,django gin等,分别对应java python go三种语言,目前我比较熟悉的就是springboot 目录 spring boot框架 简介 优点 缺点 适用场景 与需求匹配度 django框架 简介…

商城小程序源码搭建部署,商城购物小程序开发流程(php框架)

关于商城小程序 商城小程序作为一种基于移动互联网的在线购物平台,商家可以上架所销售的产品,定价,以及营运营的在线售货平台。买家无需下载应用,在小程序搜索打开即可浏览下单商品。 技术栈 前端: vue uniapp 后端&#xff1a…

探索甘肃非遗:Spring Boot网站开发案例

1 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大,随着当前时代的信息化,科学化发展,让社会各行业领域都争相使用新的信息技术,对行业内的各种相关数据进行科学化,规范化管理。这样的大环境让那些止步不前&#…

【漏洞复现】公交IC卡收单管理系统 SQL注入致RCE漏洞复现

》》》产品描述《《《 公交IC卡收单 管理系统Q是城市公共交通领域中不可或缺的一部分,它通过集成先进的集成电路技术(IC卡)实现了乘客便捷的支付方式,并有效提高了公共交通运营效率。系统集成了发卡、充值、消费、数据采集、查询和注销等多个功能模块&am…

再谈智慧园区

随着AI的兴起,其影响力将渗透到各行各业。产业园区也不例外。特别是江园科技智慧园区在园区运营上,从早期的信息化,到数字化、智能化,智慧园区是一个不可回避的话题。 01 江园科技智慧园区 无论名称或概念怎么办,产…

正则表达式的使用示例--Everything文件检索批量重命名工具

一、引言 Everything是一款非常实用的文件搜索工具,它可以帮助您快速定位并查找计算机中的文件和文件夹。Everything搜索文件资料之神速,有使用过的朋友们都深有体会,相对于Windows自带的搜索功能,使用Everything,可以…