网站界面设计总结,广州传业建设有限公司网站,wordpress搭建官网步骤,做网站的花费一 乐观锁Watch介绍 监控 #xff08;Watch#xff09;#xff1a;可用于做乐观锁 悲观锁#xff1a;很悲观#xff0c;做什么都会加锁#xff08;Synchronize关键字就是这样#xff09;乐观锁#xff1a;很乐观#xff0c;认为什么时候都不会出问题#xff0c;所以不…一 乐观锁Watch介绍 监控 Watch可用于做乐观锁 悲观锁很悲观做什么都会加锁Synchronize关键字就是这样乐观锁很乐观认为什么时候都不会出问题所以不会上锁。获取version
更新的时候比较version
使用watch key监控指定数据相当于乐观锁加锁。
二 应用场景 计数器当多个客户端同时对同一个计数器进行增减操作时可以使用乐观锁确保操作的原子性和一致性。 分布式锁通过 Redis 实现分布式锁时可以利用 WATCH 命令和事务来实现乐观锁机制确保在加锁和解锁操作期间锁的状态没有被其他客户端改变。 缓存更新在更新缓存时可以使用乐观锁来确保缓存的一致性。例如在更新缓存之前先 WATCH 缓存对应的键然后在事务中执行缓存更新操作如果缓存在 WATCH 之后被其他客户端修改则事务会失败可以根据需要进行重试或者其他处理。 队列操作在实现分布式队列时可以利用乐观锁机制来确保队列操作的原子性。例如在出队操作前先 WATCH 队列键然后在事务中执行出队操作如果队列在 WATCH 之后被其他客户端修改则事务会失败可以根据需要进行重试或者其他处理。 数据版本控制在实现数据版本控制时可以使用乐观锁来确保数据的一致性。例如在更新数据时先获取数据的版本号然后在事务中执行数据更新操作如果版本号发生变化则事务会失败可以根据需要进行重试或者其他处理。 总的来说乐观锁在 Redis 中可以用于各种需要并发控制的场景通过 WATCH 命令和事务机制来确保操作的原子性和一致性提高系统的并发处理能力和数据的一致性。 三案例
127.0.0.1:6379 set money 100 # 设置余额:100
OK
127.0.0.1:6379 set use 0 # 支出使用:0
OK
127.0.0.1:6379 watch money # 监视money (上锁)
OK
127.0.0.1:6379 multi
OK
127.0.0.1:6379 DECRBY money 20
QUEUED
127.0.0.1:6379 INCRBY use 20
QUEUED
127.0.0.1:6379 exec # 监视值没有被中途修改事务正常执行
1) (integer) 80
2) (integer) 20测试多线程修改值使用watch可以当做redis的乐观锁操作相当于getversion
线程1
127.0.0.1:6379 watch money # money上锁
OK
127.0.0.1:6379 multi
OK
127.0.0.1:6379 DECRBY money 20
QUEUED
127.0.0.1:6379 INCRBY use 20
QUEUED
127.0.0.1:6379 # 此时事务并没有执行模拟线程插队线程2
127.0.0.1:6379 INCRBY money 500 # 修改了线程一中监视的money
(integer) 600回到线程1执行事务
127.0.0.1:6379 EXEC # 执行之前另一个线程修改了我们的值这个时候就会导致事务执行失败
(nil) # 没有结果说明事务执行失败127.0.0.1:6379 get money # 线程2 修改生效
600
127.0.0.1:6379 get use # 线程1事务执行失败数值没有被修改
0解锁获取最新值然后再加锁进行事务。 unwatch进行解锁。 注意每次提交执行exec后都会自动释放锁不管是否成功