首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Redis(十二):Redis事务的基本操作

Redis(十二):Redis事务的基本操作

作者头像
栗筝i
发布于 2022-12-01 00:45:23
发布于 2022-12-01 00:45:23
32700
代码可运行
举报
文章被收录于专栏:迁移内容迁移内容
运行总次数:0
代码可运行

1、Redis事务概念

Redis 事务的本质是一组命令的集合。事务支持一次执行多个命令,一个事务中所有命令都会被序列化。在事务执行过程,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不会插入到事务执行命令序列中。

总结说:redis事务就是一次性、顺序性、排他性的执行一个队列中的一系列命令。

  • Redis不保证原子性:Redis中,单条命令是原子性执行的,但事务不保证原子性,且没有回滚。事务中任意命令执行失败,其余的命令仍会被执行。
  • Redis事务没有隔离级别的概念:批量操作在发送 EXEC 命令前被放入队列缓存,并不会被实际执行,也就不存在事务内的查询要看到事务里的更新,事务外查询不能看到。换句话说也就是所有命令在事务中,并没有直接执行,而是要在执行命令发起后才会开始执行。

Redis事务的三个阶段:

  1. 开启事务(Multi)
  2. 命令入队(…)
  3. 执行事务(Exec)

2、Redis事务基本操作命令

2.1、MULTI EXEC

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
127.0.0.1:6379> MULTI	//开启事务
OK
127.0.0.1:6379> set ke1 y1
QUEUED
127.0.0.1:6379> set ke2 y2
QUEUED
127.0.0.1:6379> get ke2
QUEUED
127.0.0.1:6379> set ke3 y3
QUEUED
127.0.0.1:6379> Exec	//执行事务
1) OK
2) OK
3) "y2"
4) OK

2.2、Discard

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
127.0.0.1:6379> MULTI	//开启事务
OK
127.0.0.1:6379> set ke1 y1
QUEUED
127.0.0.1:6379> set ke2 y2
QUEUED
127.0.0.1:6379> set ke3 y3
QUEUED
127.0.0.1:6379> Discard	//放弃事务,事务中的命令都不会执行
OK
127.0.0.1:6379> get ke1	
(nil)					//	因为放弃了事务查询不到ke1

3、Redis事务的异常

3.1、编译异常 命令有错,事务中的命令都不会执行。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
127.0.0.1:6379> set kk1 y1
QUEUED
127.0.0.1:6379> set kk2 y2
QUEUED
127.0.0.1:6379> get kk3 y3	//这是一个错误命令
(error) ERR wrong number of arguments for 'get' command
127.0.0.1:6379> get kk4 y4
(error) ERR wrong number of arguments for 'get' command
127.0.0.1:6379> set kk3 y3
QUEUED
127.0.0.1:6379> set kk4 y4
QUEUED
127.0.0.1:6379> Exec	//这里因为上面错误,进而整个事务列队都无法执行
(error) EXECABORT Transaction discarded because of previous errors.
127.0.0.1:6379> get kk3	//因为事务执行错误,所以取不到kk3的值
(nil)

3.2、运行异常 事务队列中存在逻辑性语法错误,其他命令是可以执行的,所以说Redis没有原子性的说法。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> set k1 v1
QUEUED
127.0.0.1:6379> INCR k1		//“v1”怎么加一?所以是错的
QUEUED						//并不是命令错误,运行前Redis无法识别
127.0.0.1:6379> set k2 v2
QUEUED
127.0.0.1:6379> get k2
QUEUED
127.0.0.1:6379> exec
1) OK
2) (error) ERR value is not an integer or out of range	//报错了
3) OK	//其他的正常执行
4) "v2"

4、总结

总的来说redis事务就是一次性、顺序性、排他性的执行一个队列中的一系列命令。值得注意的是它的非原子性和没有隔离级别的特性!!!

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
redis | 十二、redis之事务
Redis 的事务只是一组命令的集合,一个事务中的所有命令都会被序列化,执行过程中按照顺序执行,并且其它会话提交的命令不会插入到事务执行的命令序列中
雨中散步撒哈拉
2022/09/21
3500
Redis事务与监控
Redis 事务的本质: 一组命令的集合 一个事务中的所有命令都会被序列化, 在事务执行过程中, 会按照顺序执行 一次性 顺序性 排他性 执行一系列的命令
后端码匠
2021/01/20
4410
redis学习(十)
Redis 事务本质:一组命令的集合! 一个事务中的所有命令都会被序列化,在事务执行过程的中,会按照顺序执行! 一次性、顺序性、排他性!执行一些列的命令!
崔笑颜
2020/09/10
3660
Redis-事务
  我们知道 Redis 的单个命令是原子性的(比如 get set mget mset),如果涉及到多个命令的时候,需要把多个命令作为一个不可分割的处理序列,就需要用到事务。
会说话的丶猫
2020/10/27
3740
Redis-事务
七天玩转Redis | Day4、Redis事务操作
博主简介👨🏼‍⚕️:国内某一线互联网公司Java工程师👨🏼‍💻,业余自媒体创作者💻,CSDN博客专家🏆,Java领域优质创作者📕,华为云享专家🥇,华为HDZ核心成员👨‍💼,曾发表并出版ISEAE信息科学国际论文,全网累计发表技术博客60余万字📒,公众号【码猿编程日记】作者,坚信每一次敲动键盘都能让生活变得更智能,世界变得更有趣! 课前答疑:很多小伙伴问我零基础或者根本没有使用过Redis,可以学习嘛?当然是可以的!充分考虑到小伙伴们的学习程度有所不同,所以本次课程的所有操作都是在Windows环境下进行
灰小猿
2022/05/05
2540
七天玩转Redis | Day4、Redis事务操作
【Redis】006-Redis基本的事务操作、Redis实现乐观锁
所有的命令在事务中,并没有直接被执行,只有在发起执行命令的时候才会执行,Exec;
訾博ZiBo
2025/01/06
1290
【Redis】006-Redis基本的事务操作、Redis实现乐观锁
深入浅出Redis(五):Redis的事务机制与ACID原则
Redis是基于键值对的非关系型数据库,秉承设计简单的原则内部也提供事务机制,但是提供的事务可能不满足ACID原则
菜菜的后端私房菜
2024/09/10
2000
Redis之事务解读
Redis Multi 命令用于标记一个事务块的开始。事务块内的多条命令会按照先后顺序被放进一个队列当中,最后由 EXEC 命令原子性(atomic)地执行。
一个风轻云淡
2023/10/15
2560
【Redis 系列】redis 学习六,redis 事务处理和监控事务
我们学过的事务都是保证原子性的,但是 redis 的事务中执行多个指令,是不保证原子性的
阿兵云原生
2023/02/16
2970
Redis教程10(事务)
在MULTI命令执行之后,我们可以继续发送命令执行,但此时命令不会立即执行,而是保持到一个队列中,如下
用户4919348
2019/04/02
3630
Redis 事务(8)
Redis的单个命令是原子性的(比如get set mget mset),如果涉及到多个命令的时候,需要把多个命令作为一个不可分割的处理序列,就需要用到事务。
兜兜毛毛
2020/03/19
5470
Redis事务
①原子性:redis原子性是指将多个操作打包在一起,要么全都执行,要么全都不执行。注意:这里跟MySQL事务中的原子性相比,redis原子性不管这些操作有没有成功,它不管!如果事务中有些操作失败了,redis说失败就失败吧。而MySQL则不行,一旦有操作失败,则全部回滚!(有部分观点任务,redis没有原子性,因为以MySQL事务的原子性作为标杆,原子性必须要么执行成功,要么不执行)
二肥是只大懒蓝猫
2024/07/23
1500
Redis系列之事务机制
学习mysql数据库的时候,我们知道了事务的ACID特性,Redis也是支持事务的,不过和数据库的事务又有什么区别?在mysql数据库中,我们使用begin开启事务,提交是commit,回滚是rollback,然后Redis中的事务是怎么一回事?redis的事务其实可以看做是一组命令按照顺序,串行执行队列中的命令,其它客户端的命令不会写入到这个队列中。总的来说,redis事务就是一次性、顺序性、排他性的执行一个队列中的一组命令
SmileNicky
2023/12/18
1990
Redis事务
Redis 事务的本质是一组命令的集合。事务支持一次执行多个命令,一个事务中所有命令都会被序列化。在事务执行过程,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不会插入到事务执行命令序列中。总结说:redis事务就是一次性、顺序性、排他性的执行一个队列中的一系列命令。
用户3876103
2024/08/28
2390
Redis面试(七):事务
使用起来也很简单,可以用 multi 开启一个事务,然后将多个命令入队到事务的队列中,最后由exec命令触发事务,执行事务中的所有命令。
传说之下的花儿
2023/09/26
3550
Redis面试(七):事务
Redis事务处理机制分析与总结
事务是一组具备原子性操作的命令集合。在这一组命令中,要么全部执行成功,要么全部执行失败。
兔云小新LM
2021/01/28
8630
【玩转Redis面试第2讲】面试官再问Redis事务把这篇文章扔给他
原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被恢复(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
爱笑的架构师
2020/09/24
7970
【玩转Redis面试第2讲】面试官再问Redis事务把这篇文章扔给他
Redis之事务解读 | 技术创作特训营第一期
Redis Multi 命令用于标记一个事务块的开始。事务块内的多条命令会按照先后顺序被放进一个队列当中,最后由 EXEC 命令原子性(atomic)地执行。
一个风轻云淡
2023/08/27
2220
Redis之事务解读 | 技术创作特训营第一期
鸡肋的Redis事务
没错,Redis也有事务管理,但是功能很简单,在正式开发中也并不推荐使用。但是面试中有可能会问到,所以本文简单谈一谈Redis的事务。
蝉沐风
2022/08/22
3690
鸡肋的Redis事务
Redis中的事务介绍
MySQL中的事务大家都不陌生,Redis中的事务和MySQL中的事务不同,今天看下Redis事务中的一些知识点吧。
AsiaYe
2020/07/09
4020
相关推荐
redis | 十二、redis之事务
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档