• 分布式锁3: zk实现分布式锁


    一 zk 实现分布式锁

    1.1 zk分布式操作命令

    1.指令:
            ls /
            get /zookeeper 
            create /aa "test"
            delete /aa 
            set /aa "test1"

    2..znode节点类型:
            永久节点:create /path content
            临时节点:create -e /path content 。只要客户端程序断开链接自动删除
            永久序列化节点:create -s /path content 
            临时序列化节点:create -s -e /path content 

    1.2 zk的4种目录树

    ookeeper提供一个多层级的节点命名空间(节点称为znode),每个节点都用一个以斜杠(/)分隔的路径表示,而且每个节点都有父节点(根节点除外),非常类似于文件系统。并且每个节点都是唯一的。znode节点有四种类型:

    1.PERSISTENT:永久节点。客户端与zookeeper断开连接后,该节点依旧存在

    2.EPHEMERAL:临时节点。客户端与zookeeper断开连接后,该节点被删除

    3.PERSISTENT_SEQUENTIAL:永久节点、序列化。客户端与zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号

    4.EPHEMERAL_SEQUENTIAL:临时节点、序列化。客户端与zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号

    1.3 实战操作

    1.进入zk客户端

    ./zkCli.sh        # 查看zk客户端

    2.创建节点命令

    [zk: localhost:2181(CONNECTED) 12] get /sz
    test
    [zk: localhost:2181(CONNECTED) 13] set /sz test123
    [zk: localhost:2181(CONNECTED) 14] get /sz
    test123
    [zk: localhost:2181(CONNECTED) 15] 

    3.案例

    [zk: localhost:2181(CONNECTED) 0] create /aa test  # 创建持久化节点
    Created /aa
    [zk: localhost:2181(CONNECTED) 1] create -s /bb test  # 创建持久序列化节点
    Created /bb0000000001
    [zk: localhost:2181(CONNECTED) 2] create -e /cc test  # 创建临时节点
    Created /cc
    [zk: localhost:2181(CONNECTED) 3] create -e -s /dd test  # 创建临时序列化节点
    Created /dd0000000003
    [zk: localhost:2181(CONNECTED) 4] ls /   # 查看某个节点下的子节点
    [aa, bb0000000001, cc, dd0000000003, zookeeper]
    [zk: localhost:2181(CONNECTED) 5] stat /  # 查看某个节点的状态
    cZxid = 0x0
    ctime = Thu Jan 01 08:00:00 CST 1970
    mZxid = 0x0
    mtime = Thu Jan 01 08:00:00 CST 1970
    pZxid = 0x5
    cversion = 3
    dataVersion = 0
    aclVersion = 0
    ephemeralOwner = 0x0
    dataLength = 0
    numChildren = 5
    [zk: localhost:2181(CONNECTED) 6] get /aa  # 查看某个节点的内容
    test
    [zk: localhost:2181(CONNECTED) 11] delete /aa  # 删除某个节点
    [zk: localhost:2181(CONNECTED) 7] ls /  # 再次查看
    [bb0000000001, cc, dd0000000003, zookeeper]

    1.4 zk的监听事件

    在读取数据时,我们可以同时对节点设置事件监听,当节点数据或结构变化时,zookeeper会通知客户端。当前zookeeper针对节点的监听有如下四种事件:
      5.节点的事件监听:一次性
            1.节点创建:NodeCreated
                stat -w /xx 
            2.节点删除:NodeDeleted
                stat -w /xx
            3.节点数据变化:NodeDataChanged
                get -w /xx
            4.子节点变化:NodeChildrenChanged
                ls -w /xx

    1.客户端

    [zk: localhost:2181(CONNECTED) 28] set /teng 1234
    [zk: localhost:2181(CONNECTED) 29] 
    2.客户端2:会提示目录/teng 发生了改变

  • 相关阅读:
    瞅瞅 Opencv:扫描图像
    轻量级RPC分布式网络通信框架设计——muduo网络部分解析
    电脑提示d3dx9_43.dll丢失怎么解决,分享6种有效的解决方法
    MyBatis的xml实现
    Midjourney绘图欣赏系列(六)
    Python数据攻略-Hadoop集群中PySpark数据处理
    mongoDB 优化(1)索引
    猿创征文|瑞吉外卖——管理端_员工管理
    扎实的基础知识+正确的方法是快速阅读源码的关键
    前端性能精进之浏览器(五)——JavaScript
  • 原文地址:https://blog.csdn.net/u011066470/article/details/134563905