Redis_事务的三大特性及命令

事务的三大特性

1.单独隔离

事务中的所有命令都会被序列化,并依次执行。事务在执行时,不会被其他命令打断

2.无隔离级别概念

事务中的所有命令被提交执行前均不会执行,而是进入队列等待执行

3.不保证原子性

事务中的命令发生运行时异常时(可编译通过),该命令不执行并抛出异常,但其他命令照常执行,事务并不发生回滚

注:编译异常时(代码或命令错误)所有命令均不执行,事务被放弃,并抛出异常

事务的命令

命令描述
multi开启事务
exec提交执行事务
discard放弃事务(事务中已有的命令不会执行)
watch key [key...]监视key,若批量监视则key之间以空格分隔
unwatch取消所有监视

监视key时(watch、unwatch):

监视(Redis的乐观锁):若被监视的key在事务提交执行前就被修改,则事务被放弃,返回nil;另外,事务执行完成后,自动取消所有监视

示例:

模拟线程1:

模拟线程2:

此时提交执行线程1的事务,可以看到事务被放弃:

经测试,事务执行完成后确实取消了监视:

放弃事务时(discard):

发生运行时异常或编译异常时:

事务中的命令发生运行时异常时(此处异常为String类型不可进行+1): 

可以看到除 incr key1 命令未执行并抛出异常外,其余命令均正常执行,事务未发生回滚 

事务存在编译异常时(此处为命令错误):

可以看到事务中的所有命令均未执行,事务被放弃,并抛出异常

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值