概述
监控(Watch)
悲观锁:
什么时候都会出问题,无论做什么都加锁
乐观锁:
认为什么时候都不会出现问题,所以不会上锁!更新数据的时候去判断一下,再此期间是否有人修改过这个数据
mysql获取version
更新的时候比较version
在 Redis 中使用 watch 命令可以决定事务是 执行 还是 回滚。
一般而言,可以在 multi 命令之前使用 watch 命令监控某些键值对,然后使用 multi 命令开启事务,执行各类对数据结构进行操作的命令,这个时候这些命令就会进入队列。
当 Redis 使用 exec 命令执行事务的时候,它首先会去比对被 watch 命令所监控的键值对,
如果没有发生变化,那么它会执行事务队列中的命令,提交事务;
如果发生变化,那么它不会执行任何事务中的命令,而去事务回滚。
无论事务是否回滚 , Redis 都会去取消执行事务前的 watch 命令
Redis 参考了多线程中使用的 CAS (比较与交换, Compare And Swap ) 去执行的。在
数据高并发环境的操作中,我们把这样的一个机制称为乐观锁.