Redis——事务操作
一、概述
在Redis事务的本质,是一组命令的集合。一个事务内的所有命令会被序列化,然后在事务执行的过程中,被依次执行。
Redis的单条事务是保持原子性的,但是Redis的事务是不能保证原子性的
二、Redis事务的使用
- 开启事务
multi - 命令入队
即写入要执行的各条命令 - 执行命令 / 放弃命令
exec / discard
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set money 100
QUEUED
127.0.0.1:6379> set consume 20
QUEUED
127.0.0.1:6379> set money 80
QUEUED
127.0.0.1:6379> exec
1) OK
2) OK
3) OK
127.0.0.1:6379> get money
"80"
放弃执行
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set money 100
QUEUED
127.0.0.1:6379> discard
OK
127.0.0.1:6379> get money
"80" -- money的值并没有发生改变
三、事务执行过程中可能发生的异常
事务执行过程中,可能会发生异常,一般分为两种,和java非常类似
- 编译时异常
即由于命令语法有问题在命令入队的过程中被检查出来,此时事务内的命令都不会被执行
- 编译时异常
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set name xiaoming
QUEUED
127.0.0.1:6379> set age 18
QUEUED
127.0.0.1:6379> set color
(error) ERR wrong number of arguments for 'set' command --此时,虽然命令错了,但是事务并没有停止
127.0.0.1:6379> exec
(error) EXECABORT Transaction discarded because of previous errors.
- 运行时异常
也可以说,由于redis发生运行时异常,命令只是被序列化后在队列中执行,一条命令错误后,不影响后面命令的执行,无法实现事务的原子性
- 运行时异常
127.0.0.1:6379> set money mon
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set name xiaoming
QUEUED
127.0.0.1:6379> set age 18
QUEUED
127.0.0.1:6379> incr money --此处语法通过,所以不报错
QUEUED
127.0.0.1:6379> set color blue
QUEUED
127.0.0.1:6379> exec
1) OK
2) OK
3) (error) ERR value is not an integer or out of range
4) OK
127.0.0.1:6379> get color --虽然上一个命令发生错误,但是依然可以获取到下一个命令的值
"blue"
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)