redis管理_Redis中的事务管理

在之前的文章中我们已经介绍了很多关于Redis中的命令,虽然命令的执行是原子性的,但是如果多条命令组合在一起则Redis就不能保证组合命令的原子性了。并且如果我们接触关系型数据库,那么我们一定会知道,在关系型数据库中提供了事务管理的功能,通过事务我们可以保证一组动作,要么全部成功,要么全部失败。在Redis中也提供了类似的功能,但Redis中的事务管理和关系型数据库中事务管理还是有区别的。下面我们详细介绍一下Redis中的事务管理。


在Redis中我们可以通过multi和exec两个命令来实现简单的事务管理。multi命令代表事务的开始,exec命令代表事务的结束,在使用时这两个命令之间执行的命令都是原子性的。下面我们看具体的使用。

d4a2de5a9bd6469f6900e46c8ef698c5.png

我们看上图所示知道在使用Redis事务管理时,我们在multi和exec两个命令之间执行成功的命令,返回的结果是QUEUED的。这代表着命令并没有真正的执行,而暂时保存到Redis中。如果此时我们使用另一个客户端获取上图中key时,则返回的结果一定是0,因为命令并没有执行成功,也就是事务并没有提交。

e97b9ead49a1aef08749392d9afe7569.png

只有当执行exec命令时,Redis中的事务才会提交。提交后我们在客户端执行刚刚的命令,则会获取到事务中执行成功的数据。

a0c72e8dd916a5eb9793530c70cda0a9.png
487abb46142a36d32a1cff068db283a7.png

如果我们想要停止事务,则可以使用discard命令。

b0cbc012e6fe68fab405b93617498ace.png

下面我们介绍一下在使用Redis事务时的注意事项。

  • 命令错误:如果我们在使用事务时,如果执行命令有错误,则会造成事务无法提交。
  • 运行时错误:如果我们在事务中执行的命令本身没有语法错误时,例如将sadd命令写成了zadd命令,这种就是运行时错误了。这种错误Redis会成功的将事务提交,所以遇到这种错误时,需要开发人员自行处理了。

在某些业务中,为了确保事务中的key没有被其它客户端修改过,才提交事务,否则不执行类似乐观锁一样。在Redis中我们可以watch命令来解决这类问题。下面我们看一下具体操作。

  • 客户端一:
7eb00cfcb594146df37b463ce81c83c1.png

客户端二:

3c27497186bb01e5850438de9ee7642b.png

这就是Redis中事务管理的功能,它和传统的关系型数据库中的事务相比,Redis中事务管理要简单的多,因为关系型数据库中的事务支持很多复杂的逻辑计算,并且支持回滚功能。而Redis中事务管理不支持上述功能。这也是它们之间的主要区别。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值