一般实现分布式锁都有哪些方式 ?
使用Redis如何实现分布式锁 https://javaweixin6.blog.csdn.net/article/details/108693123
使用zk如何实现分布式锁 ?zk 实现分布式锁大致思路: 某个节点创建临时的znode, 此时如果创建成功了就获得了这个锁, 别的客户端来创建锁就会失败, 该客户端就会注册一个监听器来监听这把锁. 当持有这个锁的客户端释放锁的时候, 即删除znode , 会通知监听的客户端, 监听器等待的客户端就会去给它加上锁.
这两种分布式锁哪种效率高?redis分布式锁,其实需要自己不断去尝试获取锁,比较消耗性能
zk分布式锁,获取不到锁,注册个监听器即可,不需要不断主动尝试获取锁,性能开销较小
另外一点就是,如果是redis获取锁的那个客户端bug了或者挂了,那么只能等待超时时间之后才能释放锁;而zk的话,因为创建的是临时znode,只要客户端挂了,znode就没了,此时就自动释放锁
redis分布式锁大家每发现好麻烦吗?遍历上锁,计算时间等等。。。zk的分布式锁语义清晰实现简单
所以先不分析太多的东西,就说这两点,我个人实践认为zk的分布式锁比redis的分布式锁牢靠、而且模型简单易用