Redis22:事务和乐观锁

事务和乐观锁watch

redis使用multi开启事务,exec来执行,discard来回滚

事务中的指令会缓存在服务器中的一个事务队列中,服务器一旦受到exec指令就会顺序的执行所有指令并返回所有的运行结果,这些指令在运行时不会相互影响,因为redis是单线程的。

redis的事务并不是原子性的,一次事务的执行过程中如果有的命令失败,其他命令依然会执行,redis只是拥有隔离性中的串行化。

redis事务的每条指令都会发到服务器的事务缓存队列都会经过一次网络读写,所以一般用pipeline来执行事务中的全部指令。

乐观锁

要保证原子性,除了使用悲观锁分布式锁以外,还可以用乐观锁,也就是watch指令。

watch key代表关注了key这个键

然后开启事务,提交事务时,如果key被修改了就会报错返回一个nil,可以利用这一点来做重试直至成功为止。

原文地址:https://www.cnblogs.com/yinyunmoyi/p/13200632.html