第4章 ZK基本特性与基于Linux的ZK客户端命令行学习 4-2 session的基本原理与create命令的使用
客户端与服务端之间存在的连接,那么这样的一个连接我们就称之为会话,也就是session。其实就相当于是我们在做JSP或者说是Service的时候,那么服务端是Servlet,客户端使用的是浏览器。浏览器和Servlet之间会存在一个session,就是会话,跟这里道理是一模一样的。在Servlet里面,如果你设置了半个小时,那半个小时一直不去操作的话,那么在第31分钟的时候,你这个session就会被清除了。客户端会向服务端发送一个指令,就是说我现在还存活,你不要把我删了。一旦我没有向服务端发送这样的一个请求的话,服务端就会把我的会话(session)给删除掉,删掉之后session就过期了。
znode是zk的智能数据模型,如果说我们创建了一个临时节点的话,它是跟着session的,如果当前会话session过期了、失效了,那么所有跟着这个session所创建的临时节点都会被抛弃,也就是说会被zk自己去删除。
心跳机制是客户端向服务端的Ping包请求。我发送Ping指令给你,也就是说我现在还活着,你不要把我删了,如果说我挂了的话你再我把删掉。
create [-s] [-e] path data acl acl它是可以针对这个指令创建一个权限的,也就是说对子节点或者节点相关的一些权限,你拥有权限才能去访问。[-s] [-e]不写就是进行一个默认创建。
dataLength是10位,cversion=0,当前子节点的版本号还没有更新,dataVersion=0,当前数据的版本号是0,还没有更新。默认创建的节点是非顺序的,并且它是持久化的。
create [-e] path data 可以创建一个临时节点。在imooc下面创建了一个子节点tmp之后,子节点tmp的版本号cversion由0变为1,也就是说我们做了一次更新,它的版本号就会累加1。如果要判断zk的节点是临时节点还是持久节点的话,我们通过stat命令获取属性ephemeralOwner,如果ephemeralOwner的值是0x0,它就是持久节点,如果ephemeralOwner的值是0x100060405510006,它就是临时节点。
如何把临时节点给自动删除呢?它是有心跳机制的,如果客户端挂了的话,心跳它是接收不到任何指令,接收不到任何指令session没有,一旦没有的话,zk会自动把你刚才创建的所有的临时节点都默认删除。按Ctrl-c断开客户端连接,断开连接之后心跳是收不到。我们重新连接,为何断开客户端连接之后临时节点tmp1还存在呢?因为它是有时效性的,它的session断开之后,它还是会有一个心跳机制,它的心跳机制是有一个时间段的,也就是说要在这个时间段(可能是10s或者是20s)经过之后,心跳没有收到指令之后,它才会把tmp1给删掉,不然的话它这个tmp1还是会有的。
从这里就可以很好去理解它的心跳机制以及session超时是如何去区分的。刚才讲的是持久性,现在再来看一下顺序节点。create [-s] path data可以创建顺序节点,s是sequence的开头。如果是顺序节点的话,它会从1开始累计,由小向大递增。
create操作可以创建一些持久的、临时的、顺序节点。
第4章 ZK基本特性与基于Linux的ZK客户端命令行学习 4-2 session的基本原理与create命令的使用的更多相关文章
- 第4章 ZK基本特性与基于Linux的ZK客户端命令行学习
第4章 ZK基本特性与基于Linux的ZK客户端命令行学习 4-1 zookeeper常用命令行操作 4-2 session的基本原理与create命令的使用
- 第4章 ZK基本特性与基于Linux的ZK客户端命令行学习 4-1 zookeeper常用命令行操作
ls path [watch] watch是一个监督者.quota是zookeeper的子目录.目录就是节点的意思,对于zookeeper来说它是以一个节点来说的,所以说/就是根节点,zookeepe ...
- 《Linux命令行与shell脚本编程大全》 第二十二章 学习笔记
第二十二章:使用其他shell 什么是dash shell Debian的dash shell是ash shell的直系后代,ash shell是Unix系统上原来地Bourne shell的简化版本 ...
- 如何创建一个基于命令行工具的跨平台的 NuGet 工具包
命令行可是跨进程通信的一种非常方便的手段呢,只需启动一个进程传入一些参数即可完成一些很复杂的任务.NuGet 为我们提供了一种自动导入 .props 和 .targets 的方法,同时还是一个 .NE ...
- 让你如绅士般基于描述编写 Python 命令行工具的开源项目:docopt
作者:HelloGitHub-Prodesire HelloGitHub 的<讲解开源项目>系列,项目地址:https://github.com/HelloGitHub-Team/Arti ...
- 《Entity Framework 6 Recipes》中文翻译系列 (40) ------ 第七章 使用对象服务之从跟踪器中获取实体与从命令行生成模型(想解决EF第一次查询慢的,请阅读)
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 7-5 从跟踪器中获取实体 问题 你想创建一个扩展方法,从跟踪器中获取实体,用于数 ...
- 《Linux命令行与shell脚本编程大全》第二十二章 gawk进阶
gawk是一门功能丰富的编程语言,你可以通过它所提供的各种特性来编写好几程序处理数据. 22.1 使用变量 gawk编程语言支持两种不同类型的变量: 内建变量和自定义变量 22.1.1 内建变量 ga ...
- 《Practical Vim》第五章:命令行模式
前言 出于历史原因,命令行模式又叫 Ex 模式,它具有的功能有: 读写文件:比如 :edit, :write 等等 创建标签页或者窗口:比如 :tabnew :split 操作缓存区,比如: bnex ...
- vim第五章 命令行模式
vim第五章命令行模式 技巧 27 结识vim的命令行模式 在命令行模式中执行的命令有被称作ex命令 在按/调出查找提示符或者<C-r>=访问表示寄存器时 命令行模式也被激活 ...
随机推荐
- java编程将命令行参数转化为整数并实现求和的功能。
- 51nod 1102 单调栈
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1102 1102 面积最大的矩形 基准时间限制:1 秒 空间限制:1310 ...
- MySQL 分区知识点(一 )
前言: 查了下资料,关于 MySQL 分区的博文讲的详细的比较少,也不全,只好在官网去翻译英文文章看了.大体整理了一下记录起来: MySQL 分区类型: 1.RANGE 分区: // 这种类型的分区基 ...
- 二叉排序树的应用(java)
package com.tree.find; public class TestSearchBST { private static class BiNode{ int data; BiNode lc ...
- codewar代码练习2——7级晋升6级
7级晋升到6级的过程中以做6级题以及以前未完成的题目为主,一般选择算法题或者基础题.相比之前从8级升级7级(参见此博客:http://blog.csdn.net/m0_37324740/article ...
- javascript网页复制功能-复制到粘贴板-兼容多数浏览器(不使用flash)
使用方法:clipBordCopy("hello Copy");//执行后复制hello Copy到粘贴板 通过 var result = clipBordCopy("h ...
- python 调试命令
部分整理自:http://flysnowxf.iteye.com/blog/1327677 启动调试: python -m pdb xxx.py 常用命令说明: l #查看运行到哪行代码 n #单步运 ...
- Balanced Lineup(线段树的简单了解)
个人心得:线段树就是将一段序列拆分为一个个单独的节点,不过每俩个节点又可以联系在一起,所以就能很好的结合,比如这一题, 每次插入的时候都将这一段区间的最大最小值更新,就能大大减少时间. 这个线段树建立 ...
- BZOJ5336: [TJOI2018]party
BZOJ5336: [TJOI2018]party https://lydsy.com/JudgeOnline/problem.php?id=5336 分析: 好题. 正常的思路是设\(f[i][j] ...
- Sentry深入
Sentry的架构 内部架构 核心就是规则引擎以及Metadata Store:记录格式有两种,一种policy file记录授权内容,另外一种是通过命令方式进行授权:前者记录在策略文件中,保存形式是 ...