zoukankan      html  css  js  c++  java
  • Redis与Zookeeper实现分布式锁的区别

    1.分布式锁解决方案

       1.采用数据库 不建议 性能不好 jdbc

       2.基于Redis实现分布式锁(setnx)setnx也可以存入key,如果存入key成功返回1,如果存入的key已经存在了,返回0.

       3.基于Zookeeper实现分布式锁 Zookeeper是一个分布式协调工具,在分布式解决方案中。

        多个客户端(jvm),同时在zk上创建相同的一个临时节点,因为临时节点路径是保证唯一,只要谁能够创建节点成功,谁就能够获取到锁,没有创建成功节点,就会进行等待,当释放锁的时候,采用事件通知给客户端重新获取锁的资源。

    Redis实现分布式锁与Zookeeper实现分布式锁区别

    实现分布式锁最终是通过什么方式?(相同点)

    在集群环境下,保证只允许有一个jvm进行执行。

    从技术上分析(区别)

    Redis 是nosql数据,主要特点缓存

    Zookeeper是分布式协调工具,主要用于分布式解决方案

    实现思路(区别)

    核心通过获取锁、释放锁、死锁问题

    获取锁

    Zookeeper

    多个客户端(jvm),会在Zookeeper上创建同一个临时节点,因为Zookeeper节点命名路径保证唯一,不允许出现重复,只要谁能够先创建成功,谁能够获取到锁。

    Redis

    多个客户端(jvm),会在Redis使用setnx命令创建相同的一个key,因为Redis的key保证唯一,不允许出现重复,只要谁能够先创建成功,谁能够获取到锁。

    释放锁

    Zookeeper使用直接关闭临时节点session会话连接,因为临时节点生命周期与session会话绑定在一块,如果session会话连接关闭的话,该临时节点也会被删除。

    这时候客户端使用事件监听,如果该临时节点被删除的话,重新进入盗获取锁的步骤。

    Redis在释放锁的时候,为了确保是锁的一致性问题,在删除的redis 的key时候,需要判断同一个锁的id,才可以删除。

    共同特征:如何解决死锁现象问题

    Zookeeper使用会话有效期方式解决死锁现象。

    Redis 是对key设置有效期解决死锁现象

     

    性能角度考虑

    因为Redis是NoSQL数据库,相对比来说Redis比Zookeeper性能要好。

    可靠性

    从可靠性角度分析,Zookeeper可靠性比Redis更好。

    因为Redis有效期不是很好控制,可能会产生有效期延迟,Zookeeper就不一样,因为Zookeeper临时节点先天性可控的有效期,所以相对来说Zookeeper比Redis更好

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    Java.io.outputstream.PrintStream:打印流
    Codeforces 732F. Tourist Reform (Tarjan缩点)
    退役了
    POJ 3281 Dining (最大流)
    Light oj 1233
    Light oj 1125
    HDU 5521 Meeting (最短路)
    Light oj 1095
    Light oj 1044
    HDU 3549 Flow Problem (dinic模版 && isap模版)
  • 原文地址:https://www.cnblogs.com/ming-blogs/p/10492465.html
Copyright © 2011-2022 走看看