数据模型介绍
- 树形结构
- 每一个节点称为znode,可以有子节点,也可以有数据
- 每个节点分为临时节点和永久节点,临时节点客户端断开会丢失
- 每个zk节点都有各自的版本号
- 每个节点数据发生变化,该节点的版本号会累加(乐观锁)
- 删除/修改过时的节点,版本号不匹配则会报错
- 每个zk节点存储数据不宜过大,几kb就好
- 节点可以设置权限acl,通过权限来限制用户的访问
操作命令演示
# 查看某个路径下目录列表,watcher事件可以监听子节点
ls [path] watch
显示的是根目录下的节点
# 查看目录更详细的信息
ls2 [path]
# 新版本
ls -s [path]
# 查看当前节点状态信息
stat [path] watch
详细字段说明
# 创建节点id
cZxid = 0x0
# 创建节点时间
ctime = Thu Jan 01 08:00:00 CST 1970
# 修改节点id
mZxid = 0x0
# 修改节点时间
mtime = Thu Jan 01 08:00:00 CST 1970
# 子节点id
pZxid = 0x3
# 子节点version
cversion = 1
# 当前节点数据版本号,变化累加1
dataVersion = 0
# 当前节点权限版本号,变化累加1
aclVersion = 0
# 判断是否临时节点,如果不是0x0就是临时节点
ephemeralOwner = 0x0
# 数据长度
dataLength = 0
# 子节点数量
numChildren = 1
# 获取节点数据和状态信息,watch对节点进行事件监听
get [path] watch
# 创建节点并赋值,s表示顺序节点(名字会有编号),e表示临时节点,path路径,data数据,acl权限,默认world全世界
create [-s][-e] [path] data acl
临时节点服务器关闭会丢失,顺序节点名字带编号。
# 修改节点存储的数据,version表示版本号,查看详情里面的dataVersion(乐观锁)
set [path] data [version]
# 新版本要加 -v 做版本号控制
set [path] data -v [version]
version是为了拿来做乐观锁,防止数据修改被覆盖。
提示version No is not valid,表示版本号无效
# 删除节点
delete [path] [version]
delete一样,如果不需要做版本控制,去除-v [version] 就行。