Redis支持分布式环境下的事务操作,其事务可以一次执行多个命令,事务中的所有命令都会序列化地顺序执行。
事务在执行过程中,不会被其他客户端发送来的命令请求打断。服务器在执行完事务中的所有命令之后,才会继续处理其他客户端的其他命令。
Redis的事务操作分为开启事务、命令入队列、执行事务三个阶段。
事务执行流程
事务开启:客户端执行Multi命令开启事务。
提交请求:客户端提交命令到事务。
任务入队列:Redis将客户端请求放入事务队列中等待执行。
入队状态反馈:服务器返回QURUD,表示命令已被放入事务队列。
执行命令:客户端通过Exec执行事务。
事务执行错误:在Redis事务中如果某条命令执行错误,则其他命令会继续执行,不会回滚。可以通过Watch监控事务执行的状态并处理命令执行错误的异常情况。
执行结果返回:服务器向客户端返回事务执行的结果。
Redis事务相关命令
Redis事务的相关命令有Multi、Exec、Discard、Watch和Unwatch:
Redis事务与ACID
一般来说,事务有ACID4个特性,分别是原子性、一致性、隔离性和持久性。
原子性Atomic:Redis的事务是原子性的,所有的命令要么全部执行、要么全部不执行。
一致性Consistency:Redis事务可以保证命令失败的情况下得以回滚,数据能恢复到执行前的样子,除非redis进程意外结束。
隔离性Isolation:Redis事务具有隔离性,但是不具有结构化数据库中的隔离级别。
持久性Durability:Redis事务不保证持久性,因为redis持久化策略中,不管是RDB还是AOF都是异步执行的。