redis事务

redis 事务

redis 对事务的支持目前还比较简单。redis 只能保证一个 client 发起的事务中的命令可以连
续的执行,而中间不会插入其他 client 的命令。 由于 redis 是单线程来处理所有 client 的请
求的所以做到这点是很容易的。一般情况下 redis 在接受到一个 client 发来的命令后会立即
处理并 返回处理结果,但是当一个 client 在一个连接中发出 multi 命令有,这个连接会进入
一个事务上下文,该连接后续的命令并不是立即执行,而是先放到一个队列中。当从此连接
受到 exec 命令后,redis 会顺序的执行队列中的所有命令。并将所有命令的运行结果打包到
一起返回给 client.然后此连接就 结束事务上下文。

1.事务执行和取消
multi--->命令1--->命令2--->exec

multi--->命令1--->命令n--->discard
2.乐观锁和悲观锁

参见:乐观锁和悲观锁

对某个键加乐观锁 watch key

watch 命令会监视给定的 key,当 exec 时候如果监视的 key 从调用 watch 后发生过变化,则整
个事务会失败。也可以调用 watch 多次监视多个 key.这 样就可以对指定的 key 加乐观锁了。
注意 watch 的 key 是对整个连接有效的,事务也一样。如果连接断开,监视和事务都会被自
动清除。当然了 exec,discard,unwatch 命令都会清除连接中的所有监视。

3.事务回滚

redis 的事务实现是如此简单,当然会存在一些问题。第一个问题是 redis 只能保证事务的每
个命令连续执行,但是如果事务中的一个命令失败了,并不回滚其他命令,比如使用的命令
类型不匹配(这个和MySQL中的事务的原子性还是不相同的。MySQL中会退回到最初的状态)

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值