Redis的事务transactions

发布时间 2023-11-30 15:31:26作者: 天启A

1.Redis的事务仅仅是保证事务里的操作会被连续独占的执行,Redis的命令执行是单线程,

2.Redis不保证事务的所有指令可以同时成功或者同时失败,只可以决定是否开始执行全部指令的能力,因此也没有回滚

3.Redis可以保证一个事物内的命令会依次执行,不会被其他指令插入

 

MULTI #事务开始的标志
DISCARD #取消事务,放弃执行事务的所有命令
EXEC #执行所有事务块内的命令
WATCH #监视key 如果事务在执行前这个key被改动会打断事物
UNWATCH #取消watch对所有key的监视
#正常执行事务
MULTI

EXEC
#放弃执行事务
MULTI

DISCARD

一致:在执行事务的时候如果有一个命令语法出错,Redis就会返回错误,所有命令都不执行

非一致性:在执行事务的时候如果语法没有出错,但是语义出错,那么就会不执行错误语句,正确语句照常执行

比如:set k1 123@qq.com

      incr k1

Redis支持乐观锁,关键字wacth

第一个客户端
wacth v1
multi
-----------
第二个客户端
set v1 10
-----------
第一个客户端
set v1 20
exec

上面这个例子中的事务会保持一致性,在事务中其他指令也不会发生

注意:在提交exec的时候之前加的监控锁就都被取消了,当客户端失去链接的时候所有东西的监控都会被取消