Zookeeper 设置节点数据(set 命令)

set 命令用于在 ZooKeeper 中设置/更新某个节点的值。其语法如下:

set [-s] [-v version] path data

参数说明:

  • -s:可能表示以安静模式执行操作,即不显示额外的信息。

  • -v version:可能表示指定要更新的数据版本。

  • path:表示要设置或更新数据的节点路径。

  • data:表示要设置或更新的数据内容。

示例

(1)设置 /brokers 节点的值,如下:

[zk: localhost:2181(CONNECTED) 16] set /brokers myNewData
[zk: localhost:2181(CONNECTED) 17] get /brokers
myNewData

(2)设置 /brokers 节点值的同时查看节点状态信息,如下:

[zk: localhost:2181(CONNECTED) 20] set -s /brokers new-data
cZxid = 0x23
ctime = Sun Dec 17 13:17:55 CST 2023
mZxid = 0x26
mtime = Sun Dec 17 13:19:17 CST 2023
pZxid = 0x23
cversion = 0
dataVersion = 2
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 8
numChildren = 0
[zk: localhost:2181(CONNECTED) 21] get /brokers
new-data

(3)选项 -v 用 CAS 设置数据,可使用 stat 从 dataVersion 查到版本。如下:

# 创建一个节点
[zk: localhost:2181(CONNECTED) 26] create /brokers myData
Created /brokers

# 获取该节点的数据
[zk: localhost:2181(CONNECTED) 27] get /brokers
myData

# 设置版本为 0
[zk: localhost:2181(CONNECTED) 28] set -v 0 /brokers my-New-data
[zk: localhost:2181(CONNECTED) 29] set -v 0 /brokers my-New-data
version No is not valid : /brokers

# 设置版本为 1
[zk: localhost:2181(CONNECTED) 30] set -v 1 /brokers my-New-data
[zk: localhost:2181(CONNECTED) 31] get /brokers
my-New-data

什么是 CAS?

CAS 是“比较并交换”(Compare and Swap)的缩写。它是一种并发控制机制,通常用于多线程编程和分布式系统中,用于实现对共享变量的原子操作。

CAS 操作包含三个参数:内存位置的引用、预期值和新值。它的基本思想是,先比较内存位置的当前值与预期值,如果相等,则将该位置的值更新为新值,否则不做任何操作。

CAS 操作是原子性的,这意味着它在并发环境下可以保证对共享变量的原子操作,避免了使用锁可能带来的性能开销和死锁问题。

在多线程编程中,CAS 可以用于实现无锁数据结构,避免了锁可能带来的性能开销和死锁问题。在分布式系统中,CAS 通常用于实现乐观锁机制,用于协调不同节点对共享资源的访问。

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号