Redis 事务

Redis 事务是一个单独的隔离操作:事务中的所有命令都会序列化,按顺序地执行。事务在执行过程中,不会被其他客户端发送来的命令请求所打断。

Redis 事务的主要作用就是串联多条命令,防止别的指令插队执行。

事务指令

Redis 的事务主要涉及以下几条指令: Multi、Exec、Discard。

Multi

Multi 是事务的开始指令,从 Multi 开始,输入的命令都会依次进入命令队列中。

Exec

输入 Exec 指令后,Redis 将会依次执行之前放在命令队列中的命令。

mapull:0>multi
"OK"
mapull:0>set name 'zhangsan'
"QUEUED"
mapull:0>set age 23
"QUEUED"
mapull:0>exec
 1)  "OK"
 2)  "OK"
 3)  "OK"
 4)  "OK"
 5)  "OK"

Discard

组队过程中,可以通过执行 discard 命令放弃组队,丢弃命令队列中的命令。

watch

在执行multi之前,先执行watch key1 [key2],可以监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。

unwatch

取消 WATCH 命令对所有 key 的监视。

如果在执行 WATCH 命令之后,EXEC 命令或DISCARD 命令先被执行了的话,那么就不需要再执行UNWATCH 了。

事务的错误处理机制

组队过程中,如果某个命令出现了错误,则执行直接报错。也就是所有指令都不会执行。

如果组队过程未报错,在执行阶段出现错误,则只有报错的指令不会执行,而其他指令会被执行,已经执行的命令也不会回滚。

事务特性

对于 Redis 的事务,和通常理解的 ACID 事务不一样。

单独的隔离操作

事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。

没有隔离级别的概念

队列中的命令没有提交之前都不会实际被执行,因为事务提交前任何指令都不会被实际执行。

不保证原子性

事务中如果有一条命令执行失败,其后的命令仍然会被执行,没有回滚。

转载请注明出处:码谱记录 » Redis 事务
标签: