第九节----Redis 事务
8.1 开始事务
一个事务从开始到执行会经历以下三个阶段:
- 开始事务。MULTI
- 命令入队。EXEC
- 执行事务。
Redis的事务有几个特点:
(1)单个命令原子性,即单个命令要么执行,要么就不执行,不会执行到一半就停止了。
(2)多个命令中,如果某个命令出现异常,不会进行回滚。Redis将跳过这个错误的命令,继续执行下面的其它命令。可以理解为MySQL存储过程中的,CONTINUE方式的处理程序。
开启事务的语法:MULTI
MULTI
8.2 添加命令
在执行MULTI命令后,接着写一些命令。可以写个把错误的命令测试是不是将这些错误的命令忽略掉。
DEL myKey
SET myKey myValue
DEL mySet
SADD mySet valueA
SADD mySet valueA # 这里故意将重复的元素插入到mySet中,如果忽略掉此命令,那么mySet将只有2个元素
SADD mySet valueB
SCARD mySet #查看mySet的个数,预期为2
8.3 执行命令
执行进栈后的所有命令,并忽略错误的命令。
EXEC
下面的图片中展示了一个完整的事务执行流程。
EXEC下面的是所有命令的执行结果,在最后一行中,其结果是2,符合我们在Set集合中插入三个元素,其中有两个元素是相同的,只成功插入了一个,所以最后Set集合的个数为2
8.4 取消事务
开始事务后,肯定也有取消事务的时候。
取消事务语法:DISCARD
MULTI #开启事务
DEL myKey #这个事务中希望删除myKey
DISCARD #但是突然觉得myKey还是有用的,所以就用DISCARD 取消本次事务
GET myKey #再次获取myKey,看看是不是被删除了。结果表明没有被删,说明事务被成功取消。