Redis 事务

1 介绍

  Redis 事务可以一次执行多个命令, 并且带有以下三个重要的保证:

  • 批量操作在发送 EXEC 命令前被放入队列缓存。
  • 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。
  • 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。

  一个事务从开始到执行会经历以下三个阶段:

  • 开始事务。
  • 命令入队。
  • 执行事务。

2 命令

  • 开启事务并执行
127.0.0.1:6379> MULTI	# 开启事务
OK
127.0.0.1:6379> set name pky	# 将命令入队
QUEUED
127.0.0.1:6379> get name
QUEUED
127.0.0.1:6379> GETSET name pkyshare
QUEUED
127.0.0.1:6379> del name
QUEUED
127.0.0.1:6379> EXEC	# 执行事务
1) OK
2) "pky"
3) "pky"
4) (integer) 1
  • 开启事务取消执行
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> set name pky
QUEUED
127.0.0.1:6379> get name
QUEUED
127.0.0.1:6379> DISCARD	# 取消事务
OK
127.0.0.1:6379> get name
(nil)
  • 事务中命令错误(类似 Java 中的编译型异常),事务中的所有命令都不会执行
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> set num1 1
QUEUED
127.0.0.1:6379> get num1
QUEUED
127.0.0.1:6379> getset num2	# 错误的命令
(error) ERR wrong number of arguments for 'getset' command
127.0.0.1:6379> getset num3 3
QUEUED
127.0.0.1:6379> EXEC	# 执行事务报错
(error) EXECABORT Transaction discarded because of previous errors.
127.0.0.1:6379> get num1	# 以下两个命令可以看出,事务中的命令没有被执行
(nil)
127.0.0.1:6379> get num3
(nil)
  • 事务中命令逻辑错误(类似 Java 中的运行时异常),事务中错误命令抛异常,其他命令正常执行
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> set num1 1
QUEUED
127.0.0.1:6379> set num2 pky
QUEUED
127.0.0.1:6379> INCR num1
QUEUED
127.0.0.1:6379> INCR num2	# 对字符串 + 1
QUEUED
127.0.0.1:6379> set num3 3
QUEUED
127.0.0.1:6379> INCR num3
QUEUED
127.0.0.1:6379> EXEC
1) OK # 其他命令正常执行
2) OK
3) (integer) 2
4) (error) ERR value is not an integer or out of range	# 抛出异常
5) OK
6) (integer) 4
127.0.0.1:6379> get num1	
"2"
127.0.0.1:6379> get num2
"pky"
127.0.0.1:6379> get num3
"4"
127.0.0.1:6379> 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值