美文网首页
分布式锁的实现

分布式锁的实现

作者: 废柴傻狗 | 来源:发表于2019-12-20 14:56 被阅读0次

    为什么要实现分布式锁,原来的锁不好用吗?

    因为我们部署到单机的系统逐步演化为分布式系统,原有的锁机制只能保证在单机上某个资源在同一时间只有一个进程访问,而不能保证多台机器下某个资源同一时间只有一个进程访问。

    单机redis分布式锁

    获取锁:

    set test_lock 1352 NX PX 30000
    

    释放锁:

    get test_lock
    if value == 1352:
        del test_lock
    

    redis集群分布式锁——redlock

    zookeeper分布式锁实现

    参考这篇文章,非常简单生动易于理解。

    我自己也做了一点总结:
    首先客户端可以在zookeeper上创建节点,一共有四种节点,分别是持久节点、持久顺序节点、临时节点、临时顺序节点。持久节点的特性是客户端断开与zookeeper连接后节点仍存在,顺序节点的特性是会根据节点创建时间进行排序。

    分布式锁应用的是临时顺序节点。
    每一个试图抢占锁的线程都会在zookeeper上创建一个节点,并进行判断当前节点是否是第一个节点,如果是则获取锁成功,否则获取锁失败并进入等待状态,此时会在前一个节点注册watcher来监听前一个节点是否存在,以等待时机获取锁。

    redis和zookeeper分布式锁的区别

    分布式锁 优点 缺点
    redis 1.有封装好的框架,容易实现 2.有等待锁的队列,大大提升抢锁效率。 添加删除节点效率低
    zookeeper set和del指令效率高 1.实现复杂,需要考虑超时,原子性,误删等情形。2.没有等待锁的队列,只能在客户端自旋来等待,效率低下。

    相关文章

      网友评论

          本文标题:分布式锁的实现

          本文链接:https://www.haomeiwen.com/subject/xqbsnctx.html