Redis事务(Transactions)

相关命令

  • multi 开启事务
  • exec 开启命令执行
  • discard 取消事务(事务队列会清空, 客户端退出事务状态)
  • watch 乐观锁
  • unwatch

用法

multi

开启事务后,后续所有的命令会添加到队列,不会立即执行,一旦调用exec,所有的命令才会被依次执行

事务中可能出现的错误

  • 执行exec前,命令可能无法入队

产生的原因:命令本身出错、参数不正确、内存问题等等
这种错误在客户端常见,一旦出错,客户端通常会取消事务

  • 执行exec后,对某些key的值操作不当

比如,对某个key的值(类型为String),进行list操作
注意:在redis2.6.5之后,一个命令发生错误,其他命令继续被执行

为什么redis不支持回滚?

  • 错误的命令语法或者某个key的值---类型错误,这是编程产生的结果,可以在开发时被检测到,而不必到生产环境
  • redis内部简化且速度快,因为不需要回滚

乐观锁(CAS——check-and-set)

实现方式:watch

在执行exec之前,如果有至少一个watched key被修改,整个事务取消,返回null表示事务失败

悲观锁setnx

SETNX lock.foo 

处理死锁

  • 1.SETNX lock.foo尝试获得锁
  • 2.GET lock.foo判断锁是否过期,如果没有过期,则休眠一段时间,重复1
  • 3.GETSET lock.foo

官网地址

你可能感兴趣的:(Redis事务(Transactions))