跳至主要內容

Redis事务


Redis事务

Redis支持分布式环境下的事务操作,其事务可以一次执行多个命令,事务中的所有命令都会序列化地顺序执行。

事务在执行过程中,不会被其他客户端发送来的命令请求打断。服务器在执行完事务中的所有命令之后,才会继续处理其他客户端的其他命令。

Redis的事务操作分为开启事务、命令入队列、执行事务三个阶段。

事务执行流程

  1. 事务开启:客户端执行Multi命令开启事务。
  2. 提交请求:客户端提交命令到事务。
  3. 任务入队列:Redis将客户端请求放入事务队列中等待执行。
  4. 入队状态反馈:服务器返回QURUD,表示命令已被放入事务队列。
  5. 执行命令:客户端通过Exec执行事务。
  6. 事务执行错误:在Redis事务中如果某条命令执行错误,则其他命令会继续执行,不会回滚。可以通过Watch监控事务执行的状态并处理命令执行错误的异常情况。
  7. 执行结果返回:服务器向客户端返回事务执行的结果。

Redis事务相关命令

Redis事务的相关命令有Multi、Exec、Discard、Watch和Unwatch:

命令说明
Multi标记一个事务块的开始
Exec执行所有事务块内的命令
Discard取消事务,放弃执行事务块内的所有命令
Watch监视一个(或多个)key,如果事务执行之前这个(或这些)key被其他命令改动,那么事务将被打断
Unwatch取消Watch命令对所有key的监视

Redis事务与ACID

一般来说,事务有ACID4个特性,分别是原子性、一致性、隔离性和持久性。

  • 原子性Atomic:Redis的事务是原子性的,所有的命令要么全部执行、要么全部不执行。
  • 一致性Consistency:Redis事务可以保证命令失败的情况下得以回滚,数据能恢复到执行前的样子,除非redis进程意外结束。
  • 隔离性Isolation:Redis事务具有隔离性,但是不具有结构化数据库中的隔离级别。
  • 持久性Durability:Redis事务不保证持久性,因为redis持久化策略中,不管是RDB还是AOF都是异步执行的。
上次编辑于:
贡献者: Neil