ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## Redis专题二:事务 [TOC] ### 事务的概念 - 有序性:事务中所有的命令都是有序执行的 - 原子性:要么事务中所有命令都执行,要么都不执行; 如果`EXEC`命令被调用,则事务中所有命令都会执行。如果`EXEC`命令调用前发生错误,则事务中所有命令都不执行 ### 事务命令 | 命令 | 解释 | 返回值 | | --- | --- | --- | | `MULTI`| 事务开始的标志 |`OK`| | `[redis command]`|输入redis正常的命令,这些命令会加入到一个队列中,直到`EXEC`命令被调用,这些命令才会被执行,如`SET connections 12` |`QUEUED`| | `DISCARD`| 中止事务执行,一般写在在`MULTI`执行后 |`OK`| | `WATCH `| 为事务key提供check-and-set (CAS)检查,如果在`EXEC`调用前`WATCH `监控的keys发生变化,则会中止事务的执行,一般写在`MULTI`执行前 |`OK`| | `EXEC `| 顺序执行队列中排好队的命令,如果用了`WATCH`且keys发生变化,则事务会中止,否则事务执行所有命令 |返回每一条`[redis command]`的结果组成的列表| > DISCARD ~~~ > SET foo 1 OK > MULTI OK > INCR foo QUEUED > DISCARD OK > GET foo "1" ~~~ > MULTI与EXEC ~~~ > MULTI OK > INCR foo QUEUED > INCR bar QUEUED > EXEC 1) (integer) 1 2) (integer) 1 ~~~ > WATCH ~~~ WATCH mykey val = GET mykey val = val + 1 MULTI SET mykey $val EXEC ~~~ ### 事务中错误 - 语法错误:如错误参数的个数 ,错误的command名等 - 赋值错误:如对一个string类型的key调用list的操作方法等 > 当事务中的`[redis command]`存在赋值错误时,事务不会停止执行命令,如下面的`LPOP connections`对一个strings类型的key使用list的`LPOP`方法,产生错误`WRONGTYPE Operation against a key holding the wrong kind of value` 语法错误: ~~~ MULTI +OK INCR a b c -ERR wrong number of arguments for 'incr' command ~~~ 赋值错误: ~~~ > MULTI OK > SET connections 10 QUEUED > INCR connections QUEUED > LPOP connections QUEUED > GET connnections QUEUED > SET connections 10 QUEUED > EXEC 1) OK 2) 11 3) WRONGTYPE Operation against a key holding the wrong kind of value 4) (nil) 5) OK ~~~