Redis | Redis事务

目录

Redis事务

事务命令

Redis的事务机制

总结:


Redis事务

Redis事务可以一次执行多个命令,一次性顺序性排他性的执行一个队列中的一系列的命令。

Redis不保证原子性:

在Redis中,单条命令是原子执行的,但是事务不保证原子性,且没有回滚的概念。事务中任意命令执行失败,其余的命令仍会执行。

Redis事务是没有隔离级别的概念:

在发送exec命令前,批量的操作都只是被放入队列,并不会实际执行,所以在事务内的查询是看不到事务里的更新的,且事务外查询也不能看到。

事务命令

discard:取消事务,放弃执行事务块内的所有命令

exec:执行所有事务块内的命令

multi:标记一个事务块的开始

unwatch:取消watch命令对所有key的监视

watch key[key...]:监听一个(或多个)key,如果在事务执行之前这个(或这些)key被其他命令所改动,那么事务将被打断

Redis的事务机制

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

一个事务从开始到执行主要是三个阶段:

开启事务:multi --->  命令入队列  --->  执行事务:exec

在执行exec之前,所有的命令在事务队列中,并没有直接被执行,只有发起执行命令才会执行。

正常事务执行:

放弃事务:discard

如果放入事务队列中的命令错了可以放弃事务的执行,使用discard命令队列中的所有命令都不会执行

执行时异常:

执行时异常,如果事务队列中存在错误的语法,在事务执行的时候,其他命令都可以正确执行,错误的命令抛出异常

编译时异常:

编译时异常(命令错误),事务中所有的命令都不会被执行

watch命令:

watch命令可以监视一个或者多个key,如果在事务执行之前key被其他命令所修改,那么事务将被打断。可以当做乐观锁的使用。

正常执行成功

多个客户端操作k1值,使用watch当做乐观锁使用。使用watch监视k1,在库客户端1开启事务后,在客户端2执行修改k1操作,通过watch监控k1数据,发现数据被修改,在客户端1事务执行exec后,事务未成功执行。

总结:

Redis中事务执行分为三个阶段,开始事务(multi)、命令入队、执行事务(exec)redis是无法回滚,如果发现事务中某一个命令有问题,只能结束掉整个事务(discard),有时事务在执行的时候不希望被别的事务干扰可以使用watch方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值