企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
#### 3.6.1,悲观锁/乐观锁 **悲观锁(Pessimistic Lock),** 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁 **乐观锁(Optimistic Lock)**, 顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量, 乐观锁策略:提交版本必须大于记录当前版本才能执行更新 3.6.2,初始化信用卡可用余额和欠额 ![](https://img.kancloud.cn/83/e2/83e2ff0b6e9121456767cab3327920c6_257x352.png) 3.6.2,无加塞篡改 先监控再开启multi, 保证两笔金额变动在同一个事务内 ![](https://img.kancloud.cn/97/91/97914c69677c011a77915eba2fc4dce0_290x201.png) 3.6.2,有加塞篡改 监控了key,如果key被修改了,后面一个事务的执行失效 ![](https://img.kancloud.cn/23/ea/23ea98fefe8b9a41b5014d4bce073e37_262x260.png) 3.6.3,unwatch ![](https://img.kancloud.cn/3d/7c/3d7c31a2b66764380353234d3402489d_248x307.png) 一旦执行了exec之前加的监控锁都会被取消掉了 3.6.4,小结 Watch指令,类似乐观锁,事务提交时,如果Key的值已被别的客户端改变, 比如某个list已被别的客户端push/pop过了,整个事务队列都不会被执行 通过WATCH命令在事务执行之前监控了多个Keys,倘若在WATCH之后有任何Key的值发生了变化, EXEC命令执行的事务都将被放弃,同时返回Nullmulti-bulk应答以通知调用者事务执行失败 - - - - - -