Redis事务
Redis事务
Redis支持分布式环境下的事务操作,其事务可以一次执行多个命令,事务中的所有命令都会序列化地顺序执行。
事务在执行过程中,不会被其他客户端发送来的命令请求打断。服务器在执行完事务中的所有命令之后,才会继续处理其他客户端的其他命令。
Redis的事务操作分为开启事务、命令入队列、执行事务三个阶段。
事务执行流程
- 事务开启:客户端执行Multi命令开启事务。
- 提交请求:客户端提交命令到事务。
- 任务入队列:Redis将客户端请求放入事务队列中等待执行。
- 入队状态反馈:服务器返回QURUD,表示命令已被放入事务队列。
- 执行命令:客户端通过Exec执行事务。
- 事务执行错误:在Redis事务中如果某条命令执行错误,则其他命令会继续执行,不会回滚。可以通过Watch监控事务执行的状态并处理命令执行错误的异常情况。
- 执行结果返回:服务器向客户端返回事务执行的结果。
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都是异步执行的。