结论:Redis事务并不是原子性的!
Redis的事务
Redis的事务可以一次执行多个指令,本质是一系列的命令的集合。具有一次性、顺序性、排他性。
--------------- multi (开启事务) 操作1 操作2 ... EXEC (执行事务) -----------------
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set k1 v1
QUEUED
127.0.0.1:6379> set k2 v2
QUEUED
127.0.0.1:6379> EXEC
1) OK
2) OK
- 在Redis中,事务中的命令会被序列化并且顺序执行。在Redis事务的执行过程中,永远不会发生另一个客户端发出的请求。这样可以确保将命令作为单个隔离操作执行。
- Redis事务是一个原子操作,要么
EXEC
所有命令都被执行,要么所有命令都不执行。MULTI
之后的操作都会进入队列等待EXEC
,如果断线没有EXEC
所有操作都不会执行。
Redis事务的命令
MULTI 开启事务
…命令
EXEC 执行事务
DISCARD 关闭事务
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set k1 v1
QUEUED
127.0.0.1:6379> set k2 v2
QUEUED
127.0.0.1:6379>