ZooKeeper节点的增删改查

原地址:https://www.cnblogs.com/sherrykid/p/5813148.html

ZooKeeper数据结构:

            

查询指令:

    ls path:列出path下的文件

[zk: 127.0.0.1:2181(CONNECTED) 4] ls /
[zookeeper]

    如上:列出根目录节点下的所有文件,目前就只有一个系统自带的zookeeper节点

    stat path:查看节点状态

[zk: 127.0.0.1:2181(CONNECTED) 6] stat /zookeeper
cZxid = 0x0
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x0
mtime = Thu Jan 01 08:00:00 CST 1970
pZxid = 0x0
cversion = -1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 1
 
 

    解释:

cZxid:创建节点时的事务id
pZxid:子节点列表最后一次被修改的事务id
cversion:节点版本号
dataCersion:数据版本号
aclVerson:acl权限版本号

    get path:获取指定节点的内容
    ls2 path:列出path节点的子节点及状态信息

创建指令:

    create [-s] [-e] path data acl

[zk: 127.0.0.1:2181(CONNECTED) 10] create /node_1 123
Created /node_1

如上:在根目录创建了node_1节点,携带数据 123
使用 get /node_1 验证是否添加节点及其数据成功
[zk: 127.0.0.1:2181(CONNECTED) 15] create -e /node_1/node_1_1 234
Created /node_1/node_1_1

创建了一个临时节点(-e),并且携带数据234

    使用stat命令查看这个新建的临时节点

[zk: 127.0.0.1:2181(CONNECTED) 16] stat /node_1/node_1_1
cZxid = 0x200000003
ctime = Sat Aug 27 15:27:30 CST 2016
mZxid = 0x200000003
mtime = Sat Aug 27 15:27:30 CST 2016
pZxid = 0x200000003
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x156cacb918b0000
dataLength = 3
numChildren = 0

ephemeralOwner值不再是0,表示这个临时节点的版本号,如果是永久节点则其值为 0x0
 
 

    通过使用-s参数,创建一个顺序节点,我们虽然指定的节点名是node_1_1,但是实际上,名称却是 node_1_10000000001

[zk: 127.0.0.1:2181(CONNECTED) 1] create -s /node_1/node_1_1 234
Created /node_1/node_1_10000000001
 
 

    如果重复执行:

[zk: 127.0.0.1:2181(CONNECTED) 2] create -s /node_1/node_1_1 234
Created /node_1/node_1_10000000002

修改指令:

 
 

    set path data [version]

[zk: 127.0.0.1:2181(CONNECTED) 14] set /node_1 998
cZxid = 0x200000002
ctime = Sat Aug 27 15:24:39 CST 2016
mZxid = 0x20000000a
mtime = Sat Aug 27 15:38:40 CST 2016
pZxid = 0x200000008
cversion = 5
dataVersion = 2
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 3

    如果我们多次修改,会发现  dataVersion ,也就是数据版本,在不停得发生变化(自增),如果我们在set的时候手动去指定了版本号,就必须和上一次查询出来的结果一致,否则,就会报错。这个可以用于我们在修改节点数据的时候,保证我们修改前数据没被别人修改过。因为如果别人修改过了,我们这次修改是不会成功的。

删除指令:

    delete path [version]

    删除指定节点数据,其version参数的作用于set指定一致

delete /node_1/node_1_10000000001

    整个节点全删除

    注意:delete只能删除不包含子节点的节点,如果要删除的节点包含子节点,使用rmr命令

rmr /node_1



猜你喜欢

转载自blog.csdn.net/HenryMrZ/article/details/80873312