什么是事务?

事务是恢复和并发控制的基本单位,事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
  • 原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
  • 一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
  • 隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
  • 持久性(durability)。持久性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。

Redis事务简介及实现

  • Redis保证一个事务中的所有命令要么都执行,要么都不执行。如果在发送EXEC命令前客户端断线了,则Redis会清空事务队列,事务中的所有命令都不会执行。而一旦客户端发送了EXEC命令,所有的命令就都会被执行,即使此后客户端断线也没关系,因为Redis中已经记录了所有要执行的命令。
  • Redis的事务还能保证一个事务内的命令依次执行而不被其他命令插入
//命令行实现
127.0.0.1:6379> multi OK 127.0.0.1:6379> set test1 11 QUEUED 127.0.0.1:6379> set test2 22 QUEUED 127.0.0.1:6379> exec 1) OK 2) OK

 

Redis事务和数据库事务的区别及原因

       Redis事务不支持回滚,原因如下:

  只有当发生语法错误(这个问题在命令队列时无法检测到)了,Redis命令才会执行失败, 或对keys赋予了一个类型错误的数据:这意味着这些都是程序性错误,这类错误在开发的过程中就能够发现并解决掉,几乎不会出现在生产环境。由于不需要回滚,这使得Redis内部更加简单,而且运行速度更快。

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄