【Redis】阿里面试官让我用Zk(Zookeeper)实现分布式锁( 四 )


还有么?
使用Zookeeper也有可能带来并发问题 , 只是并不常见而已 。
由于网络抖动 , 客户端可ZK集群的session连接断了 , 那么zk以为客户端挂了 , 就会删除临时节点 , 这时候其他客户端就可以获取到分布式锁了 。
就可能产生并发问题了 , 这个问题不常见是因为zk有重试机制 , 一旦zk集群检测不到客户端的心跳 , 就会重试 , Curator客户端支持多种重试策略 。
多次重试之后还不行的话才会删除临时节点 。
Tip:所以 , 选择一个合适的重试策略也比较重要 , 要在锁的粒度和并发之间找一个平衡 。
有更好的实现么?
基于Redis的分布式锁
能跟我聊聊么?
我看看了手上的表 , 老公 , 今天天色不早了 , 你全问完了 , 我怎么多水几篇文章呢?
行确实很晚了 , 那你回家去把家务干了吧?
我????
【Redis】阿里面试官让我用Zk(Zookeeper)实现分布式锁
本文插图

=
总结 zk通过临时节点 , 解决掉了死锁的问题 , 一旦客户端获取到锁之后突然挂掉(Session连接断开) , 那么这个临时节点就会自动删除掉 , 其他客户端自动获取锁 。
zk通过节点排队监听的机制 , 也实现了阻塞的原理 , 其实就是个递归在那无限等待最小节点释放的过程 。
我上面没实现锁的可重入 , 但是也很好实现 , 可以带上线程信息就可以了 , 或者机器信息这样的唯一标识 , 获取的时候判断一下 。
zk的集群也是高可用的 , 只要半数以上的或者 , 就可以对外提供服务了 。
这周会写完Redis和数据库的分布式锁的 , 老公们等好 。
我是敖丙 , 一个在互联网苟且偷生的工具人 。
最好的关系是互相成就 , 老公们的「三连」就是丙丙创作的最大动力 , 我们下期见!
注:如果本篇博客有任何错误和建议 , 欢迎老公们留言 , 老公你快说句话啊!
你知道的越多 , 你不知道的越多


推荐阅读