redis事务介绍

  redis中的事务本质上是一组命令的集合。一个事务中的所有命令都会被序列化,按照顺序串行地执行而不会被其他命令插入。
  redis通过下面的五条命令来支持事务:
  1. MULTI:标记一个事务块的开始
  2. EXEC:执行所有事务块中的命令
  3. DISCARD:放弃执行所有事务块中的命令
  4. WATCH:监视一个或多个key,如果在事务执行之前这些key被其他命令改动,那么事务会被打断
  5. UNWATCH:取消WATCH命令对所有key的监视

  示例:
  
  image_1b6t2ns8s37ndhe1nqkgrc1279.png-162.8kB
  
  image_1b6t2p6do1ka3173q63ccblh7tm.png-186kB
  
  image_1b6t348qo1bvh12fs1a8s1fjb127d13.png-148.9kB
  
  image_1b6t3gokig7k1jeid481uofjqi1g.png-178.6kB
  
  现在,当我们将一个有语法错误的命令加入队列,执行EXEC后会发现不仅错误的命令不会执行,而且正确的命令也不会执行:
  
  image_1b6t45c5vrllsj010tld9t1cjh1t.png-252.1kB
  
  但是,当我们把一个语法正确,但是运行时会出错的命令加入队列,例如,对非数字类型的值执行自增操作,会发现,当执行EXEC后,仅仅该条错误命令不会执行,其他命令都会照常执行:
  
  image_1b6t4fi3bfm7q6g1ul41rdr13ae2a.png-120.8kB
  
  所以可以说,redis是部分支持事务的。
  
  redis的WATCH命令可以监视一个或多个key,一旦其中有任意一个key被修改,那么在此之后的事务都不会执行,例如:
  
  image_1b6t52hclsfoc2k9n1s0b10ru2n.png-112.7kB
  
  image_1b6t58jne1a74i79e4l8glskm34.png-133.3kB
  
  image_1b6t5ario14dnch3h911hvp5g23h.png-147.1kB
  
  注意:由于WATCH命令的作用只是当被监控的键被修改后取消之后的事务,并不能保证其他客户端不修改监控的值,所以当EXEC命令执行失败之后需要手动重新执行整个事务:
  
  image_1b6t5dsmv14r53kd1tp21ho911i83u.png-189.8kB
  
  执行EXEC命令之后会取消监控使用WATCH命令监控的键,另外,也可以通过在执行MULTI命令之前使用UNWATCH命令来取消监控。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值