前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【Redis入门到精通八】Redis事务与MySQL事务对比

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

作者头像
小皮侠
发布于 2024-10-01 00:10:30
发布于 2024-10-01 00:10:30
1710
举报

事务

什么是事务呢?事务的概念其实就是把一系列操作绑定成一组,让这一组操作能够批量执行,不过在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的监控。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-10-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Redis事务
①原子性:redis原子性是指将多个操作打包在一起,要么全都执行,要么全都不执行。注意:这里跟MySQL事务中的原子性相比,redis原子性不管这些操作有没有成功,它不管!如果事务中有些操作失败了,redis说失败就失败吧。而MySQL则不行,一旦有操作失败,则全部回滚!(有部分观点任务,redis没有原子性,因为以MySQL事务的原子性作为标杆,原子性必须要么执行成功,要么不执行)
二肥是只大懒蓝猫
2024/07/23
1090
初识Redis · 事务
前文我们花了大部分篇幅介绍了持久化,涉及到了RDB和AOF机制,涉及的文件有dump.rdb,appendonly.aof,涉及到的命令有save,bgsave,以及介绍了混合持久化的机制。并且理解了持久化主要是针对的Redis是一个内存级数据库的。
_lazy
2025/04/24
530
初识Redis · 事务
跟我一起学Redis之Redis事务简单了解一下
关系数据库中的事务,小伙伴们应该是不陌生了,不管是在开发还是在面试过程中,总有两个问题逃不掉:
huofo
2022/03/16
6110
跟我一起学Redis之Redis事务简单了解一下
Redis 中有事务吗?有何不同?
在数据库领域,事务是一组原子性的操作,要么全部成功执行,要么全部失败回滚,以此来保证数据的一致性和完整性。Redis 作为一款高性能的键值存储数据库,也提供了事务相关的功能。然而,Redis 的事务与传统关系型数据库的事务在实现和特性上存在一些差异。本文将深入探讨 Redis 中的事务机制,包括其基本概念、使用方式、与传统事务的区别以及适用场景等内容。
编程小白狼
2024/12/31
1700
redis | 十二、redis之事务
Redis 的事务只是一组命令的集合,一个事务中的所有命令都会被序列化,执行过程中按照顺序执行,并且其它会话提交的命令不会插入到事务执行的命令序列中
雨中散步撒哈拉
2022/09/21
3280
【C#与Redis】--高级主题--Redis 事务
事务是数据库管理系统中的一个基本概念,用于管理对数据库的一系列操作,以确保数据的一致性和完整性。在Redis中,事务通过MULTI、EXEC、DISCARD和WATCH等命令实现。事务中的操作要么全部执行,要么全部回滚,保证了原子性。通过WATCH命令,Redis实现了乐观锁,确保在事务执行期间没有其他客户端对监视的键进行修改,以保证事务的隔离性。事务还支持异常处理,可以通过判断执行结果决定是否继续执行或回滚。Redis事务提供了一种高效且可靠的方式来执行多个命令,是保证数据完整性的重要机制。
喵叔
2023/12/25
3060
深入理解 MySQL 事务:隔离级别、ACID 特性及其实现原理
事务(Transaction),一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元。事务通常由高级数据库操作语言或编程语言(如 SQL,C++ 或 Java)书写的用户程序的执行所引起,并用形如begin transaction和end transaction语句(或函数调用)来界定。事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全部操作组成。
CG国斌
2022/05/06
5350
深入理解 MySQL 事务:隔离级别、ACID 特性及其实现原理
【redis】事务详解,相关命令multi、exec、discard 与 watch 的原理
Redis 把多个操作打包到一起执行,已经可以称为是原子性了,只是 MySQL 标杆,提高了“原子性”门槛,这就使人们谈到原子性的时候,更多的想到的是 MySQL 这样带回滚的原子性
椰椰椰耶
2025/03/23
1810
【redis】事务详解,相关命令multi、exec、discard 与 watch 的原理
深入学习MySQL事务:ACID特性的实现原理
事务是MySQL等关系型数据库区别于NoSQL的重要方面,是保证数据一致性的重要手段。本文将首先介绍MySQL事务相关的基础概念,然后介绍事务的ACID特性,并分析其实现原理。
Bug开发工程师
2019/03/06
6980
深入学习MySQL事务:ACID特性的实现原理
Redis事务
Redis 事务的本质是一组命令的集合。事务支持一次执行多个命令,一个事务中所有命令都会被序列化。在事务执行过程,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不会插入到事务执行命令序列中。总结说:redis事务就是一次性、顺序性、排他性的执行一个队列中的一系列命令。
用户3876103
2024/08/28
1660
Redis为什么不支持回滚
1.在Redis中,命令只会因为错误的语法而失败,或者是命令用在了错误类型的键上面;
Vincent-yuan
2021/10/13
1.7K1
Redis09-Redis事务
上一篇我们介绍了Redis的持久化[1],这一篇我们接着来学习Redis的事务。将从如下几个方面进行阐述,事务的介绍,Redis事务的介绍,Redis事务与数据库事务的区别。
码农飞哥
2021/08/18
2660
【Redis】事务
Redis的事务没有像MySQL那么全,它主要的意义将操作“打包”成一个整体,避免其他客户端的命令,插队到中间~
用户11369558
2025/01/24
610
【Redis】事务
mysql事务的实现原理
此篇文章算是对mysql事务的一个总结,在了解这些之前我们先对mysql在执行的过程中 有一个整体的认识,如下图
程序员小饭
2020/09/07
1K0
MySQL数据库的事务隔离和MVCC
事务必须服从ISO/IEC所制定的ACID原则。ACID是原子性(atomicity)、一致性(consistency)、隔离性(isolation)、持久性(durability)的缩写,这四种状态的意思是:
数据和云
2019/05/13
1.2K0
MySQL数据库的事务隔离和MVCC
mysql事务,面试官都会问些啥?
此篇文章算是对mysql事务的一个总结,基本把mysql事务相关的知识点都涵盖到了,面试问来问去无非也就是这些,接下来咱们逐一总结
程序员小饭
2022/03/03
5040
mysql事务,面试官都会问些啥?
MySQL是如何实现事务的ACID
最近在面试,有被问到,MySQL的InnoDB引擎是如何实现事务的,又或者说是如何实现ACID这几个特性的,当时没有答好,所以自己总结出来,记录一下。
纪莫
2020/08/20
1.5K0
第13章_事务基础知识
🧑个人简介:大家好,我是 shark-Gao,一个想要与大家共同进步的男人😉😉
程序员Leo
2023/08/02
2260
第13章_事务基础知识
MySQL(十三)之MySQL事务
前言   这段时间自己会把之前学的东西都总结一遍,希望对自己以后的工作中有帮助。其实现在每天的状态都是很累的,但是我要坚持!   进入我们今天的正题:   为什么MySQL要 有事务呢?事务到底是用来干什么的?我们通过一个例子来说明:   事务广泛的运用于订单系统、银行系统等多种场景。如果有以下一个场景:A用户和B用户是银行的储户。现在A要给B转账500元。那么需要做以下几件事:     1)检查A的账户余额>500元;     2)A账户扣除500元;     3)账户增加500元;   正常的流程走下来
用户1195962
2018/01/18
9150
详解MySQL并发控制及事务原理
在如今互联网业务中使用范围最广的数据库无疑还是关系型数据库MySQL,之所以用"还是"这个词,是因为最近几年国内数据库领域也取得了一些长足进步,例如以TIDB、OceanBase等为代表的分布式数据库,但它们暂时还没有形成绝对的覆盖面,所以现阶段还得继续学习MySQL数据库以应对工作中遇到的一些问题,以及面试过程中关于数据库部分的考察。
用户5927304
2020/11/03
7170
详解MySQL并发控制及事务原理
相关推荐
Redis事务
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档