目录
概念
和其他数据库一样,Redis,作为NoSQL数据库也是同样提供了事务机制。在Redis中,MULTI/EXEC/DISCARD/WATCH这四个命令实现了事务。
下面是事务的几个特点:
1. 事务中所有的命令都被串行化,在事务执行阶段,Redis不再为其他客户端提供任何服务,保证了事务中所有命令都被原子的执行;
2. 与关系型数据库中的事务相比,在Redis事务中如果有某一条命令执行失败,那么后面的命令任然会执行。
3. 通过MULTI开启一个事务,就会关系型数据库中的“BEGIN TRANSACTION”,通过EXEC/DISCARD命令提交以及回滚,和关系型数据库COMMIT/ROLLBAC语言。
4. 在事务开启之前,如果复活点与服务客户端器之间出现通信故障导致网络断开,其后所有待执行的语句都将不会被服务器执行。然后如果网络中断事件是发生在执行EXEC命令后,那么该事务中的所有命令都将被服务器执行;
5. 当使用Append-Only模式时,Redis会通过调用系统函数write将该事务内的所有写操作,全部写入磁盘中,然而如果在写入的过程中出现系统的崩溃,如电源故障导致的宕机,那么此时也许只有部分数据被写入磁盘,而另外一部分数据已经丢失。Redis服务器会在重启时执行一些列必要的检测,一旦发现类似的问题,就会立即退出并给出相应的错误提示。此时,就要充分利用Redis包提供的redis-check-aof工具,该工具可以帮助定位到数据不一致的数据,并将已经写入的部分数据进行回滚。修复后就可以重新启动Redis服务器。
操作
multi
incr t1
incr t2
exec
事务中存在失败的命令
multi
set a 3
lpop a
set a 4
exec