分布式锁

数据库锁乐观锁:实现方式(CAS:Compare and Swap 比较并交换)
内部使有自旋机制
流程:内存值V,预期值A,新值B
1、更新值时判断内存值(实际在内存中存的值)与预期值(之前读出来的)相等吗
2、如果相等,则把内存更新成新值;如果不等,则不更新

基于ZooKeeper分布式锁的流程

1、在zookeeper指定节点(locks)下创建临时顺序节点node_n
2、获取locks下所有子节点children
3、对子节点按节点自增序号从小到大排序
4、判断本节点是不是第一个子节点,若是,则获取锁;若不是,则监听比该节点小的那个节点的删除事件
5、若监听事件生效,则回到第二步重新进行判断,直到获取到锁

redis全局锁:

加锁:
1、判断锁是否存在,不存在直接调用存储当前线程信息并且设置过期时间,返回nil,告诉客户端直接获取到锁。
2、判断锁是否存在,存在则将重入次数加1,并重新设置过期时间,返回nil,告诉客户端直接获取到锁。
3、被其它线程已经锁定,返回锁有效期的剩余时间,告诉客户端需要等待。

解锁
1、如果lock键不存在,发消息说锁已经可用
2、如果锁不是被当前线程锁定,则返回nil
3、由于支持可重入,在解锁时将重入次数需要减1
4、如果计算后的重入次数>0,则重新设置过期时间
5、如果计算后的重入次数<=0,则发消息说锁已经可用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值