数据库一般都具有ACID这4个特性:
- A:Atomic,原子性,将事务开启到事务结束之间的操作,要么全部执行,要么全部不执行。
- C:Consistent,一致性,事务完成后,数据是和谐一致的。
- I:Isolation,隔离性,如果有多个事务并发执行,每个事务作出的修改必须与其他事务隔离;
- D:Duration,持久性,即事务完成后,对数据库数据的修改被持久化存储。
redis的事务主要有MULTI ,EXEC,DISCARD,WATCH这四个命令。
redis事务步骤如下:
- 事务开始 :
MULTI命令的执行,标识着⼀个事务的开始。
- 命令入队:
当redis开启事务之后,redis服务器会根据客户端发送来的命令来执行不同的操作。如果发送的命令为MULTI、EXEC、WATCH、DISCARD中的⼀个,立即执行这个命令。
如果是其他命令,⾸先检查此命令的语法是否正确,如果不正确,服务器会在客户端状态的 flags 属性关闭REDIS_MULTI 标识,并且返回错误信息给客户端(事务最后也会执行不成功,但是还不会退出当前事务)。 如果正确,将这个命令放入⼀个事务队列(FIFO)里面,然后向客户端返回 QUEUED。
- 事务执行:
EXEC命令。如果客户端状态的 flags 属性不包含 REDIS_MULTI 标识或者包含 REDIS_DIRTY_CAS 或者包含REDIS_DIRTY_EXEC 标识,那么就取消事务的执行。 否则客户端处于事务状态(flags 有 REDIS_MULTI 标识),服务器按顺序执行事务队列中的所有命令,最后将返回结果全部返回给客户端。如果有个别执行失败,一般也不会影响其他命令。即redis 不支持事务回滚机制,但是它会检查每⼀个事务中的命令是否错误。
- 事务终止:
DISCARD,客户端清空事务队列,并且从事务状态中退出。
取消监控:
UNWATCH,可以取消watch对所有key的监控。
网友评论