# 一、介绍 redis提供了不完整的事务,有3个命令 multi 开启事务,相当于begin exec 执行事务,相当于commit discard 回滚,相当于rollback 使用方法如下图所示 QUEUED是一个提示字符串,和OK相同,表示指令已经被服务器缓存到队列里了 ![[Snipaste_2023-02-24_14-42-21.png]] # 二、原子性 事务的原子性是指事务要么全部成功,要么全部失败,redis的事务不具备原子性,因为它在遇到指令执行失败后,后面的指令还会继续执行。 redis仅仅是满足了事务隔离性中的串行化(当前执行的事务有着不被其他事务打断的权利) # 三、使用 一般事务和管道是一起使用的,这样可以将多次IO操作压缩为单次IO操作。 重点:多线程事务,redis提供了watch机制(一种乐观锁)用于解决并发修改问题 watch会在事务开始之前盯住一个或多个关键变量,当事务执行时(服务器收到exec指令要顺序执行缓存的事务队列时),Redis会检查关键变量自watch之后是否被修改(包括当前事务所在的客户端)。如果关键变量被修改,exec指令就会返回NULL回复客户端事务执行失败,这个时候客户端可以选择重试。 **禁止在multi和exec之间执行watch指令,必须在multi之前盯住关键变量**