redis事务

redis的事务不同于关系型数据库的事务,不完全遵从ACID的4个特点;redis事务是指可以一次执行多个命令。
● 批量操作在发送 EXEC 命令前被放入队列缓存。
● 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。
● 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。

一个redis事务从开始到结束经过三个过程:
开始事务—>命令入列—>提交事务

单个 Redis 命令的执行是原子性的,但 Redis 没有在事务上增加任何维持原子性的机制,所以 Redis 事务的执行并不是原子性的。
事务可以理解为一个打包的批量执行脚本,但批量指令并非原子化的操作,中间某条指令的失败不会导致前面已做指令的回滚,也不会造成后续的指令不做。

这是官网上的说明 From redis docs on transactions: It’s important to note that
even when a command fails, all the other commands in the queue are
processed – Redis will not stop the processing of commands.

错误分为两种:语法错误是在提交的时候就会检测返回,并且命令一条都不会执行;另一种是运行时的错误,是无法进行强一致性控制的,也就是部分成功提交,部分失败

下表列出了 redis 事务的相关命令:
discard:取消事务,放弃事务块的所有命令
exec:执行所有事务块的命令
multi:标记一个事务块的开始
unwatch:取消watch命令对所有key的监视
watch key[keys..]:监视一个或者多个key,如果事务执行之前这个key被改动,那么事务将被打断

样例

redis 127.0.0.1:7000> multi
OK
redis 127.0.0.1:7000> set a aaa
QUEUED
redis 127.0.0.1:7000> set b bbb
QUEUED
redis 127.0.0.1:7000> set c ccc
QUEUED
redis 127.0.0.1:7000> exec
1) OK
2) OK
3) OK

下面的例子:sadd key 3会在运行时检测出错误,但是 set key 4和set key 2命令是执行成功,不会回滚

172.19.17.131:6379> multi
OK
172.19.17.131:6379> set key 2
QUEUED
172.19.17.131:6379> sadd key 3
QUEUED
172.19.17.131:6379> set key 4
QUEUED
172.19.17.131:6379> exec
1) OK
2) (error) WRONGTYPE Operation against a key holding the wrong kind of value
3) OK
172.19.17.131:6379> get key
"4"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值