设想以下场景:
假设本来有10000元余额,
有三个知道密码的人同时结账,就会发生冲突问题。
悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。
即上锁------>操作------->解锁以便给下一个人使用
乐观锁(Optimistic Lock), 顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量。
比如,第一个人付款成功,此时余额的版本号就会变成v1.1,第二个人去付款的时候,发现自己手上持有的版本号是v1.0 ,不是最新的v1.1,此时他就会替换成v1.1版本后再进行判断余额是否足够,从而避免超卖问题。
WATCH key [key ...]
定义:在执行multi之前,先执行watch key1 [key2],可以监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。
有以下两个事务,假设事务1先执行。事务2在准备执行的时候,因为k1已经被事务1更改,所以事务2不会执行成功(显示nil)
unwatch
取消 WATCH 命令对所有 key 的监视。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?