You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

20 lines
1.3 KiB

# 一、介绍
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之前盯住关键变量**