Redis事务
Redis事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
Redis的作用
Redis事务的主要作用就是串联多个命令防止别的命令插队。
Redis事务的三个特性
1.单独的隔离操作
事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
2.没有隔离级别的概念
队列中的命令没有提交之前都不会实际的被执行,因为事务提交前任何指令都不会被实际执行,也就不存在“事务内的查询要看到事务里的更新,在事务外查询不能看到”这个让人万分头痛的问题 。
3.不保证原子性
Redis同一个事务中如果有一条命令执行失败,其后的命令仍然会被执行,没有回滚 。
常用命令
命令 | 描述 |
multi | 标记一个事务的开始 |
discard | 取消事务,放弃执行事务块内的所有命令 |
exec | 标记事务开始,开始执行队列中的命令 |
watch <key1> <key2>... | 监视一个或者多个可以,如果在事务执行之前key的值发生改变,则事务将被打断 |
unwatch | 取消watch命令对所有key的监视 |
图解
从输入Multi命令开始,输入的命令都会依次进入命令队列中,但不会执行,至到输入Exec后,Redis会将之前的命令队列中的命令依次执行。
组队的过程中可以通过discard来放弃组队。
事务的错误处理
组队中某个命令出现了报告错误,执行时整个的所有队列会都会被取消。
如果执行阶段某个命令报出了错误,则只有报错的命令不会被执行,而其他的命令都会执行,不会回滚