事务
命令原型 | 时间复杂度 | 命令描述 | 返回值 |
MULTI | 用于标记事务的开始,其后执行的命令都将被存入命令队列,直到执行EXEC时,这些命令才会被原子的执行。 | 始终返回OK | |
EXEC | 执行在一个事务内命令队列中的所有命令,同时将当前连接的状态恢复为正常状态,即非事务状态。如果在事务中执行了WATCH命令,那么只有当WATCH所监控的Keys没有被修改的前提下,EXEC命令才能执行事务队列中的所有命令,否则EXEC将放弃当前事务中的所有命令。 | 原子性的返回事务中各条命令的返回结果。如果在事务中使用了WATCH,一旦事务被放弃,EXEC将返回NULL-multi-bulk回复。 | |
DISCARD | 回滚事务队列中的所有命令,同时再将当前连接的状态恢复为正常状态,即非事务状态。如果WATCH命令被使用,该命令将UNWATCH所有的Keys。 | 始终返回OK。 | |
WATCHkey [key ...] | O(1) | 在MULTI命令执行之前,可以指定待监控的Keys,然而在执行EXEC之前,如果被监控的Keys发生修改,EXEC将放弃执行该事务队列中的所有命令。 | 始终返回OK。 |
UNWATCH | O(1) | 取消当前事务中指定监控的Keys,如果执行了EXEC或DISCARD命令,则无需再手工执行该命令了,因为在此之后,事务中所有被监控的Keys都将自动取消。 | 始终返回OK。 |
multi
127.0.0.1:6379> multi OK 127.0.0.1:6379> set a 3 QUEUED 127.0.0.1:6379> lpop a QUEUED 127.0.0.1:6379> set a 4 QUEUED 127.0.0.1:6379> get a QUEUED 127.0.0.1:6379> exec 1) OK 2) (error) WRONGTYPE Operation against a key holding the wrong kind of value 3) OK 4) "4" 127.0.0.1:6379> get a "4"
回滚 discard
127.0.0.1:6379> get a "4" 127.0.0.1:6379> multi OK 127.0.0.1:6379> set a 5 QUEUED 127.0.0.1:6379> discard # OK 127.0.0.1:6379> get a "4"
watch
客户端1
127.0.0.1:6379> get a "4" 127.0.0.1:6379> multi OK 127.0.0.1:6379> incr a # 此时,在另一个客户端2修改值 QUEUED 127.0.0.1:6379> exec (nil) 127.0.0.1:6379> get a # 失效 "3"
客户端2
127.0.0.1:6379> decr a (integer) 3