天凉好个秋
Redis
作为一个内存型数据库,同样支持传统数据库的事务特性。这篇文章会从源代码角度来分析Redis
中事务的实现原理。
Redis
事务提供了一种将多个命令请求打包,然后一次性、按照顺序地执行多个命令的机制,并且在事务执行的期间,服务器不会中断事务而去执行其他不在事务中的命令请求,它会把事务中所有的命令都执行完毕才会去执行其他的命令。
Redis
中提供了multi
、discard
、exec
、watch
、unwatch
这几个命令来实现事务的功能。
Redis
的事务始于multi
命令,之后跟着要在事务中执行的命令,终于exec
命令或者discard
命令。加入事务中的所有命令会原子的执行,中间不会穿插执行其他没有加入事务的命令。
multi
、exec
和discard
multi
命令告诉Redis
客户端要开始一个事物,然后Redis
会返回一个OK
,接下来所有的命令Redis
都不会立即执行,只会返回QUEUED
结果,直到遇到了exec
命令才会去执行之前的所有的命令,或者遇到了discard
命令,会抛弃执行之前加入事务的命令。