当前位置: 首页 > 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 发生了改变

相关文章:

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

一 zk 实现分布式锁 1.1 zk分布式操作命令 1.指令: ls / get /zookeeper create /aa "test" delete /aa set /aa "test1" 分布式锁实现原理与最佳实践 2..znode节点类型: 永…...

每日博客Day8

每日博客Day 8 每日算法 206.翻转链表 个人第一次思路: 其实我个人的第一个思路是比较暴力的,我第一遍暴力遍历链表,把链表的所有数值全部都保存到数组里面,然后翻转这个数组,再重复的覆盖当前的这个链表。但是这样…...

Redis-主从与哨兵架构

Jedis使用 Jedis连接代码示例&#xff1a; 1、引入依赖 <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.9.0</version> </dependency> 2、访问代码 public class JedisSingleTe…...

PTA 7-3 将数组中的数逆序存放

本题要求编写程序&#xff0c;将给定的n个整数存入数组中&#xff0c;将数组中的这n个数逆序存放&#xff0c;再按顺序输出数组中的元素。 输入格式: 输入在第一行中给出一个正整数n&#xff08;1≤n≤10&#xff09;。第二行输入n个整数&#xff0c;用空格分开。 输出格式:…...

JavaScript 如何拷贝对像(Object)或者数组(Array)

目录 JavaScript数据拷贝类型 浅拷贝 深拷贝 举例&#xff1a; 浅拷贝 数组 对象 深拷贝 lodash cloneDeep使用示例 自定义深拷贝方法示例 JSON.parse() 和 JSON.stringify()使用示例 JavaScript数据拷贝类型 浅拷贝 数组可以使用Array.prototype.slice()方法 …...

nodejs669在线图书借阅管理系统vue前端

系统的设计与实现主要实现角色有管理员和用户,管理员在后台管理用户模块、用户表模块、图书借阅模块、图书归还模块、图书分类模块、token表模块、收藏表模块、书籍信息模块、图书资讯模块、留言板模块、书籍信息评论表模块、注册用户模块、配置文件模块、处罚记录模块、在线客…...

计算机网络之概述

一、概述 1.1因特网概述 定义 网络(Network)由若干结点(Node)和连接这些结点的链路(Link)组成。多个网络还可以通过路由器互连起来&#xff0c;这样就构成了一个覆盖范围更大的网络&#xff0c;即互联网&#xff08;或互连网&#xff09;因此&#xff0c;互联网是“网络的网络…...

git stash save untracked not staged

git stash save untracked not staged 如图 解决方案&#xff1a; git stash save "tag标记信息" --include-untracked或者&#xff1a; git stash save -u "tag标记信息" git stash clear清空本地暂存代码_zhangphil的博客-CSDN博客文章浏览阅读486次。…...

spring-boot集成mybatis-generator

通用 Mapper 在 1.0.0 版本的时候增加了 MyBatis Generator (以下简称 MBG) 插件&#xff0c;使用该插件可以很方便的生成实体类、Mapper 接口以及对应的 XML 文件。 下面介绍了 mybatis-generator 在 spring-boot 中的使用过程 一、引入pom依赖 <dependencies><de…...

C++中用于动态内存的new和delete操作符

文章目录 1、动态分配内存的应用2、动态分配内存与分配给普通变量的内存有什么不同?3、C 中如何分配/释放内存4、new 操作符4.1 使用new的语法4.2 初始化内存4.3 分配内存块4.4 普通数组声明 Vs 使用new4.5 如果运行时没有足够内存可用怎么办&#xff1f; 5、delete 操作符 C/…...

什么是美颜sdk?集成第三方美颜sdk的步骤

本文将深入探讨如何集成第三方美颜sdk&#xff0c;为直播平台引入更先进、更具吸引力的美颜特效。 第一步&#xff1a;选择合适的第三方美颜sdk 在开始集成美颜sdk之前&#xff0c;首要任务是选择适合自己直播平台需求的第三方美颜sdk。不同的sdk可能具有不同的特色和性能&a…...

Gogs服务搭建及软件的使用

Gogs基本操作使用&#xff1a;https://blog.51cto.com/yangxingzhen/5980346 Gitea—私有git服务器搭建教程:https://huaweicloud.csdn.net/638db200dacf622b8df8c7f1.html?spm1001.2101.3001.6650.3&utm_mediumdistribute.pc_relevant.none-task-blog-2%7Edefault%7ECTR…...

Python基础语法之学习运算符

Python基础语法之学习运算符 一、代码二、效果 一、代码 print("1 1 ", 1 1) print("1 - 1 ", 1 - 1) print("1 * 1 ", 1 * 1) print("11 / 5 ", 11 / 5) print("11 // 5 ", 11 // 5) print("9 % 5 ", 9…...

freertos任务调度机制深度分析(以RISC-V架构为例)

1、前言 本文是以RISC-V架构为例进行讲解&#xff0c;在汇编代码层面和ARM架构不一样&#xff0c;但是整体框架是一样的侧重任务调度底层机制讲解&#xff0c;讲解代码只保留了基本功能&#xff0c;可配置的功能基本都已经删除本文是以可抢占式调度机制进行讲解RISC-V架构只支持…...

深入了解Spring Boot中@Async注解的8大坑点

文章目录 1. 缺少EnableAsync注解2. 异步方法需独立3. 不同的异步方法间无法相互调用4. 返回值为void的异步方法无法捕获异常5. 外部无法直接调用带有Async注解的方法6. Async方法不适用于private方法7. 缺失异步线程池配置8. 异步方法与事务的兼容结语 &#x1f389;深入了解S…...

C语言——深入理解指针(3)

目录 1. 字符指针 2. 数组指针 2.1 数组指针变量 2.2 数组指针变量的初始化 3.二维数组传参&#xff08;本质&#xff09; 4. 函数指针 4.1 函数指针变量的创建 4.2 函数指针的使用 4.3 typedef 5. 函数指针数组 6. 转移表&#xff08;函数指针数组的使用&#xff…...

图书管理系统源码,图书管理系统开发,图书借阅系统源码配置和运行图解源码已附加

目录 配置简介和软件条件 数据库附件配置 vs应用程序web.config配置数据库链接字符串 数据库文件脚本代码 配置简介和软件条件 所需要的软件是Vs2017以上数据库是Sqlserver2012以上&#xff0c;如果数据库附件不了可以使用数据库脚本附件数据库脚本会在文章末尾写出来。可以…...

FFmpeg介绍

官方网站&#xff1a;http://www.ffmpeg.org/ 项目组成 libavformat 封装模块&#xff0c;封装了Protocol层和Demuxer、Muxer层&#xff0c;使得协议和格式对于开发者来说是透明的。FFmpeg能否支持一种封装格式的视频的封装与解封装&#xff0c;完全取决于这个库&#xff0c…...

修改网卡PHY的灯-RK3568

文章目录 前言1.定制PHY的灯2.通过命令修改LED状态3.修改驱动效果前言 前面我们已经移植了网卡到开发板上面,也能够正常的进行通信,但是,我们会发现座子上面的灯并没有全部亮起来,而且这些灯的含义是什么,并没有讲解到,这里,就此问题,展开学习。 PHY 有一个重要的功能…...

11月29日作业

作业&#xff1a; 自己封装一个矩形类(Rect)&#xff0c;拥有私有属性:宽度(width)、高度(height)&#xff0c; 定义公有成员函数: 初始化函数:void init(int w, int h) 更改宽度的函数:set_w(int w) 更改高度的函数:set_h(int h) 输出该矩形的周长和面积函数:void show(…...

OpenClaw自动化周报:Qwen3.5-9B-AWQ-4bit整合Git与日历数据

OpenClaw自动化周报&#xff1a;Qwen3.5-9B-AWQ-4bit整合Git与日历数据 1. 为什么需要自动化周报 每周五下午&#xff0c;我的日历总会准时弹出"写周报"的提醒。这个看似简单的任务却总让我头疼——需要翻遍Git提交记录、查日历会议纪要、整理零散的笔记&#xff0…...

深度学习图神经网络:从结构数据中学习表示

深度学习图神经网络&#xff1a;从结构数据中学习表示 1. 背景与意义 图神经网络&#xff08;Graph Neural Networks&#xff0c;GNNs&#xff09;是一类专门处理图结构数据的深度学习模型。在现实世界中&#xff0c;许多数据都具有图结构&#xff0c;如社交网络、分子结构、…...

软件PWM库原理与工程实践:轻量级非阻塞式脉宽调制实现

1. PWM库技术解析&#xff1a;面向嵌入式工程师的底层实现与工程化应用1.1 库定位与核心价值PWM&#xff08;Pulse Width Modulation&#xff09;库是一个轻量级、非阻塞式脉宽调制信号生成工具&#xff0c;专为资源受限的微控制器平台设计。其核心价值不在于替代硬件PWM外设&a…...

TOPMAX嵌入式Top-N最大值追踪库详解

1. TOPMAX库概述&#xff1a;嵌入式系统中的Top-N最大值追踪引擎TOPMAX是一个专为资源受限嵌入式平台设计的轻量级Arduino库&#xff0c;其核心功能是实时、高效地维护一个动态数据流中的前N个最大值。该库并非简单的排序容器&#xff0c;而是一种经过工程优化的“滑动窗口最大…...

017、任务运行时间统计与运行状态跟踪:你的系统真的在“干活”吗?

017、任务运行时间统计与运行状态跟踪:你的系统真的在“干活”吗? 去年调试一个电机控制项目,系统偶尔会丢脉冲。用逻辑分析仪抓信号,发现任务调度周期出现了几毫秒的抖动。老板问我:“到底是哪个任务偷了时间?”我愣了半天——FreeRTOS默认只告诉我任务在运行,可没告诉…...

别再傻傻分不清!ESP32-S3上USB CDC、UART0和板载CH340到底谁在干活?

ESP32-S3串口全解析&#xff1a;快速识别USB CDC、UART0与CH340的实战指南 刚拿到ESP32-S3开发板时&#xff0c;很多开发者都会遇到一个令人困惑的场景——连接电脑后&#xff0c;设备管理器里突然冒出三四个COM端口&#xff0c;而Arduino IDE的下拉菜单里也列出一堆选项。到底…...

2026年大数据专业数据分析学习指南

一、核心技术与工具2026年主流大数据技术栈&#xff08;如Spark、Flink、Hadoop生态&#xff09; 实时数据处理与批处理技术对比 云原生数据分析平台&#xff08;AWS/GCP/Azure解决方案&#xff09; 机器学习与深度学习在数据分析中的融合应用二、数学与统计基础概率论与数理统…...

GT511C3指纹模块嵌入式驱动开发与工程实践

1. GT511C3指纹识别模块底层驱动技术解析GT511C3是由Digital Persona公司推出的高性能光学指纹识别模块&#xff0c;广泛应用于门禁系统、考勤终端、金融支付设备及嵌入式身份认证场景。该模块基于ARM7TDMI内核主控&#xff0c;集成专用图像处理引擎与模板匹配协处理器&#xf…...

从YOLOv8到SpikeYOLO:在边缘设备上部署脉冲神经网络目标检测的完整实践指南

从YOLOv8到SpikeYOLO&#xff1a;边缘设备超低功耗目标检测实战手册 在无人机巡检、智能安防摄像头和可穿戴设备等边缘计算场景中&#xff0c;持续运行的目标检测系统常受限于电池容量与散热条件。传统卷积神经网络&#xff08;CNN&#xff09;如YOLOv8虽能实现实时检测&#x…...

CP853显示驱动库:面向AUTOSAR的车载TFT-LCD底层控制方案

1. CP853 显示驱动库深度解析&#xff1a;面向大众汽车CARIAD平台的TFT-LCD底层控制方案CP853并非通用开源显示库&#xff0c;而是专为大众汽车集团CARIAD软件平台定制开发的嵌入式图形驱动组件。其命名“CP853”隐含硬件型号标识&#xff08;可能对应某代车载信息娱乐系统SoC集…...