首页 > 其他 > 详细

redis 事务

时间:2021-05-31 15:42:42      阅读:19      评论:0      收藏:0      [点我收藏+]

事务中的所有命令都会序列化、按顺序地执行,批量执行命令。

相关命令

multi  # 开启事务

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

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

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

unwatch # 取消 WATCH 命令对所有 key 的监视。 

1、对于事务中命令错误的处理:

1)对于发生在 EXEC 执行之前的错误(相当于编译错误),服务器会对命令入队失败(语法错误)的情况进行记录,并在客户端调用 EXEC 命令时,拒绝执行并自动放弃这个事务。即所有命令都不执行。

2)在 EXEC 命令执行之后所产生的错误(相当于运行时错误), 即使事务中有某个/某些命令在执行时产生了错误, 事务中的其他命令仍然会继续执行。

从上面两点看, Redis 不支持回滚(roll back)


2、使用 check-and-set 操作实现乐观锁

WATCH 命令可以为 Redis 事务提供 check-and-set (CAS)行为。被 WATCH 的键会被监视,并会发觉这些键是否被改动过了。 如果有至少一个被监视的键在 EXEC 执行之前被修改了, 那么整个事务都会被取消, EXEC 返回“nil”来表示事务已经失败。
当 EXEC 被调用时, 不管事务是否成功执行, 对所有键的监视都会被取消。

如果在 WATCH 执行之后, EXEC 执行之前, 有其他客户端修改了 mykey 的值, 那么当前客户端的事务就会失败。 程序需要做的, 就是不断重试这个操作, 直到没有发生碰撞为止。
这种形式的锁被称作乐观锁, 它是一种非常强大的锁机制。 并且因为大多数情况下, 不同的客户端会访问不同的键, 碰撞的情况一般都很少, 所以通常并不需要进行重试。


http://www.redis.cn/topics/transactions.html

redis 事务

原文:https://www.cnblogs.com/zhanglw456/p/14831406.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!