这篇文章主要介绍复述中事务是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
相关命令
命令格式作用返回结果<强>看强> <强>看键[键……)强>将给出的<代码> 代码>键标记为<代码>监测态> 代码,作为事务执行的条件总是好的。<强> UNWATCH 强> <强> UNWATCH 强>清除事务中<代码>键代码>的<代码>监测态> 代码,如果调用了<强>执行强>或<强>丢弃>强,则没有必要再手动调用<强> UNWATCH >强总是好的。<强>多强> <>强多强> <代码>显式> 代码开启<代码>复述,事务> 代码,后续<代码> 代码>命令将排队,等候使用<强>执行>强进行原子执行总是好的。<强>执行强> <强>执行>强执行事务中的<代码> 代码>队的命令列,恢复连接状态。如果<强>看强>在之前被调用,只有<代码>监测> 代码中的<代码> 代码>键没有被修改,命令才会被执行,否则停止执行(详见下文,<代码> CAS机制> 代码)<强>成功:>强返回数组,每个元素对应着原子事务中一个<代码>命令> 代码的返回结果;<强>失败:>强返回零代码> <代码>(<代码> Ruby代码>返回<代码>“零”代码>);<强>丢弃强> <强>丢弃强>清除事务中的<代码> 代码>队的命令列,恢复连接状态。如果<强>看强>在之前被调用,<代码>释放代码> <代码>监测> 代码中的<代码>键> 代码总是好的。
<>强注意:强>
- - - - - - <代码>多代码>,<代码>执行代码>,<代码>丢弃> 代码才是<代码>显式> 代码开启并控制事务的常用命令,可类比<代码>关系型数据库> 代码中的,<代码>开始代码>,<代码>提交代码>,<代码>回滚代码> (事实上,差距很大),
- - - - - - <代码> 代码>看命令的使用是为了解决<代码>事务并发代码>产生的<代码>不可重复读代码>和<代码>幻读代码>的问题(简单理解为给<代码>键加锁> 代码);
引用> <人力资源/>复述,事务
多,执行,丢弃,看是复述,事务的基础。<代码>用来显式开启并控制一个事务,它们允许在一个步骤中执行一组命令> 代码。并提供两个重要的保证:
<李>
事务中的所有命令都会被序列化并按顺序执行。在执行复述,事务的过程中,不会出现由另一个客户端发出的请求。这保证<代码>命令队列> 代码作为一个单独的原子操作被执行。
李> <李>队列中的命令要么全部被处理,要么全部被忽略.EXEC命令触发事务中所有命令的执行,因此,当客户端在事务上下文中失去与服务器的连接,
李> <李>如果发生在调用多命令之前,则不执行任何<代码>命令> 代码;
李> <李>如果在此之前高管命令被调用,则所有的<代码> 代码>命令都被执行。
李>同时,复述,使用AOF(扩展文件),使用一个额外的<代码>写操作> 代码将事务写入磁盘。如果发生宕机,进程奔溃等情况,可以使用redis-check-aof工具修复扩展文件,使服务正常启动,并恢复部分操作。
<人力资源/>用法
使用<代码>多代码>命令<代码>显式开启代码>复述,事务。该命令总是以好回应。<代码>此时用户可以发出多个命令,复述,不会执行这些命令,而是将它们排队> 代码。<代码> EXEC> 代码被调用后,所有的命令都会被执行。而调用<代码>丢弃> 代码可以<代码>清除代码>事务中的<代码>命令队列> 代码并<代码>退出事务> 代码。
<李>
以下示例以原子方式,递增键foo和bar。
李>祝辞多 好吧 祝辞INCR foo 排队 祝辞INCR 酒吧 排队 在执行 1)(整数)1 2)(整数)1从上面的命令执行中可以看的出,<代码>执行代码>返回一个<代码>数组代码>,<代码>其中每个元素都是事务中单个命令的返回结果,而且顺序与命令的发出顺序相同> 代码。 当复述,连接处于<代码>多> 代码请求的上下文中时,所有命令将以<代码>字符串排队代码>(<强>从复述,协议的角度作为状态回复发送强>)作为回复,并在<代码>命令队列> 代码中排队。只有高管被调用时,排队的命令才会被执行,此时才会有<代码>真正的返回结果> 代码。
<人力资源/>事务中的错误
<强>事务期间,可能会遇到两种命令错误:强>
<李>
<强>在调用<代码>执行代码>命令之前出现错误(
复述中事务是什么