Redis事务详解

1、Redis通过MULTI、EXEC、WARCH命令来实现事务,在同一个事务中的命令会一次性顺序的被执行,期间不会被打断,但是在EXEC命令执行之前,redis服务器可以执行其他的命令

127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> SET "name" 32
QUEUED
127.0.0.1:6379> get name
QUEUED
127.0.0.1:6379> set ab ab
QUEUED
127.0.0.1:6379> exec
1) OK
2) "32"
3) OK
127.0.0.1:6379> 

2、MULTI命令执行表示客户端开启事务模式,通过把客户端的REDIS_MULTI标识打开实现。当客户端发送来的命令是EXEC(执行事务)、DISCARD(丢弃事务中命令)、WATCH、MULTI这四个命令的一个,服务器立即执行该命令;否则只是把命令入队列。
3、WATCH命令是一个乐观锁,所有对数据库的修改命令,执行之后都会把被修改键的REDIS_DIRTY_CAS标识打开,标识该事务不安全,此时如果客户端有使用WARCH key,那么只要事务中包含这个key,就会执行失败。
4、如果命令入队列时,出现基本语法错误,则事务中所有命令不会执行,

127.0.0.1:6379> multi
OK
127.0.0.1:6379> set name 43
QUEUED
127.0.0.1:6379> ge n2
(error) ERR unknown command `ge`, with args beginning with: `n2`, 
127.0.0.1:6379> exec
(error) EXECABORT Transaction discarded because of previous errors.
127.0.0.1:6379> get name
"23"
127.0.0.1:6379> 

如果执行出错,则不会中断事务

127.0.0.1:6379> get name
"23"
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set name 45
QUEUED
127.0.0.1:6379> multi
(error) ERR MULTI calls can not be nested
127.0.0.1:6379> set name 67
QUEUED
127.0.0.1:6379> exec
1) OK
2) OK
127.0.0.1:6379> get name
"67"
127.0.0.1:6379> 

你可能感兴趣的:(Redis事务详解)