使用redis如何设计分布式锁?使用zk可以吗?如何实现啊这两种哪个效率更高啊??
既然是锁,就需要考虑是需要乐观锁还是悲观锁。
1、redis的实现,2.6.12版本之前可参考:http://jingpin.jikexueyuan.com/article/52334.html。2.6.12版本之后可参考:https://www.cnblogs.com/linjiqin/p/8003838.html。原理基本一样,利用redis的单线程特性及命令的原子性来实现。
2、zk可以实现,分布式锁是它几大主要应用场景之一。大体思路,可利用zk的临时节点和监听器来实现悲观锁,创建节点成功的线程获取到锁,没创建成功的注册一个父节点下子节点变更的watcher监听器。进一步,如果需要乐观锁,可利用zk的临时有序节点和监听器来实现,如果并发较高,监听方式可由监听父节点下子节点的并更改为:a)若读请求,监听比自己序号小的最后一个写请求节点。b)若写请求,监听比自己序号小的最后一个节点。具体实现代码网上不少,如果想系统学习,可以买本《从Paxos到Zookeeper》看看。
3、至于哪个效率更高,不好说,两者都是企业级的分布式锁实现方案,工业强度都很高。个人感觉应该从自己公司哪种框架的健壮性以及运维支持更好来考虑。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。