当前位置: 首页 > news >正文

分布式锁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 发生了改变

http://www.lryc.cn/news/248278.html

相关文章:

  • 每日博客Day8
  • Redis-主从与哨兵架构
  • PTA 7-3 将数组中的数逆序存放
  • JavaScript 如何拷贝对像(Object)或者数组(Array)
  • nodejs669在线图书借阅管理系统vue前端
  • 计算机网络之概述
  • git stash save untracked not staged
  • spring-boot集成mybatis-generator
  • C++中用于动态内存的new和delete操作符
  • 什么是美颜sdk?集成第三方美颜sdk的步骤
  • Gogs服务搭建及软件的使用
  • Python基础语法之学习运算符
  • freertos任务调度机制深度分析(以RISC-V架构为例)
  • 深入了解Spring Boot中@Async注解的8大坑点
  • C语言——深入理解指针(3)
  • 图书管理系统源码,图书管理系统开发,图书借阅系统源码配置和运行图解源码已附加
  • FFmpeg介绍
  • 修改网卡PHY的灯-RK3568
  • 11月29日作业
  • 【从删库到跑路 | MySQL总结篇】表的增删查改(进阶下)
  • 【机器学习 | 可视化系列】可视化系列 之 决策树可视化
  • 配置阿里云的yum仓库
  • Kubernetes之kubeadm日志展示篇—K8S私有云worker节点gluster安装部署
  • P3368 【模板】树状数组 2 (区间修改,单点查询)
  • 智慧城市运营管理平台解决方案:PPT全文61页,附下载
  • Vue性能优化方法
  • 关于网站的favicon.ico图标的设置需要注意的几点
  • PHP中关于func_get_args()方法
  • EMA训练微调
  • Kafka集群部署详细教程