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的时候之前加的监控锁就都被取消了,当客户端失去链接的时候所有东西的监控都会被取消