分布式架构下实现分布式锁使用数据库方案、 Zookeeper分布式锁、Redis分布式锁

分布式锁的简介
分布式锁是需要独立于每个服务器之外的,不能是某一个业务服务器中的。
在这里插入图片描述

数据库方案

利用主键冲突控制一次只能一个服务器中的一个线程获取锁,需要自己去实现阻塞、不可重入、失效时间才行。阻塞利用while可以做简单的实现,不可重入可以在递归线程中加上自旋计数进行简单处理,失效时间可以这表中加入一个时间字段,然后利用一些定时任务进行处理

Zookeeper分布式锁

zookeeper通过创建临时节点(znode)来判断是否获取到了锁,类似于这平时我们用电脑的时候,在同一个文件夹下建相同名字文件一样的原理,是不能创建两个相同名字的文件的。zookeeper是不会出现死锁的,如果有个客户端获取到锁后突然挂掉了,zookeeper会有一个监听机制,去判断这个客户端是否存活,如果客户端不在了则会去删掉临时节点(znode),其他客户端就可以重新获取锁了。同时zookeeper利用时间顺序节点来解决惊群效应,惊群效应比如说现在有100个服务在等待获取锁,但是你之有一把锁,这个时候全部唤醒是没有必要的,因为全部唤醒也只能有一个获取到锁。

Redis分布式锁

redis主要是通过setNX实现,setNX是只有key不存在的时候才能设置成功,命令在设置成功时返回1 ,设置失败时返回 0 。redis处理网络请求的时候是一个单线程,也就是天然优势,不需要考虑并发安全。在使用时为了防止锁被其他线程释放,在value中存入锁的唯一标识,在释放锁的时候做value验证。可重入性,锁的时间延期没有实现,需要通过redisson解决

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Acmen-zym

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值