关于Redis与zk的分布式锁

一般实现分布式锁都有哪些方式 ?

使用Redis如何实现分布式锁
https://javaweixin6.blog.csdn.net/article/details/108693123

使用zk如何实现分布式锁 ?

zk 实现分布式锁大致思路:
某个节点创建临时的znode, 此时如果创建成功了就获得了这个锁, 别的客户端来创建锁就会失败, 该客户端就会注册一个监听器来监听这把锁.
当持有这个锁的客户端释放锁的时候, 即删除znode , 会通知监听的客户端, 监听器等待的客户端就会去给它加上锁.

这两种分布式锁哪种效率高?

redis分布式锁,其实需要自己不断去尝试获取锁,比较消耗性能

zk分布式锁,获取不到锁,注册个监听器即可,不需要不断主动尝试获取锁,性能开销较小

另外一点就是,如果是redis获取锁的那个客户端bug了或者挂了,那么只能等待超时时间之后才能释放锁;而zk的话,因为创建的是临时znode,只要客户端挂了,znode就没了,此时就自动释放锁

redis分布式锁大家每发现好麻烦吗?遍历上锁,计算时间等等。。。zk的分布式锁语义清晰实现简单

所以先不分析太多的东西,就说这两点,我个人实践认为zk的分布式锁比redis的分布式锁牢靠、而且模型简单易用

猜你喜欢

转载自blog.csdn.net/qq_33229669/article/details/108694909