redis高级特性之事务

redis事务相比较于mysql的事务来说比较的简单并且不想mysql的事务完善,下面简单的介绍下。

在mysql中事务的四个特点原子性,一致性,隔离性,持久性。但是在redis中并没有很好的实现。在redis中我们可以通过multi来开启事务,在执行事务的过程中,我们可以保证的是一个客户端在执行命令的的过程中不会受到其他客户端的影响,在事务中如果执行多条命令的话,首先命令会被放在一个队列中,等到执行exec的时候队列中的事务会被提交。但是redis事务一个明显的缺陷是,他的原子性以及事务的回滚做的很不好,看下面的例子

redis-cli

set name hello

set age 20

multi

incr name

incr age

exec

上面的例子中,我设置了两个key,其中一个name---hello,另外的一个keyage----20,然后对两个key进行了加1的操作,但是name是不能够进行加1的,所以在执行的过程中incr name返回值是0,代表的是操作失败。但是此时我们的redis数据库仍然会将事务进行提交。最后执行的结果就是age进行了加1的操作,但是name没有进行加1的操作,这显然是不符合事务的逻辑的。事务应该是要么都执行,要么都不执行的。所以redis在这方面需要改进。

同样如果我们想要放弃我们事务队列中对数据库的修改,直接discard即可恢复。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值