第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>=访问表示寄存器时 命令行模式也被激活 ... 
随机推荐
- MVC3 学习总结一(未发布)
			MVC: Model,View,Control 设置View中的数据 1. 返回model,View中强类型化 Control: public ActionResult Browse(strin ... 
- python reload(sys)找不到,name 'reload' is not defined
			在操作数据库的时候遇到这个问题,为什么会出现这种原因?查询如下: python在安装时,默认的编码是ascii,当程序中出现非ascii编码时,python的处理常常会报这样的错UnicodeDeco ... 
- ImageSwitcher的简单使用
			测试代码: activity_main.xml: <?xml version="1.0" encoding="utf-8"?> <Linear ... 
- Eclipse_插件_05_自动下载jar包源码插件
			一.Java Source Attacher 1.下载 官网:http://marketplace.eclipse.org/content/java-source-attacher#.U5RmTePp ... 
- power designer 设计数据库生成到oracle数据库
			一.概念模型设计 1. 创建工程,创建概念设计模型,在快捷菜单栏调出 palette 找到表格工具,在主界面中创建表格. 2. 创建出的表格,双击进入设计模式 -------------------- ... 
- canvas基础学习(四)
			今天逛天猫时,看见优衣库店铺首页有个这个飘雪效果,顿时觉得好酷炫,立马从里面copy代码进行学习. 之前我也做过一些canvas特效,往往在canvas全屏时,canvas下层的div就无法进行dom ... 
- Uva1401(字典树)
			1401 - Remember the Word Time limit: 3.000 seconds Neal is very curious about combinatorial problems ... 
- hdu4451 Dressing(容斥原理)
			#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #inc ... 
- uva10892(暴力枚举)
			把n的所有因子求出来,总数不会太多,所以直接O(n2)的暴力枚举所有对行不行. 有几个细节要注意,详见代码. #include<iostream> #include<cstdio&g ... 
- leetcode_sql_2,183
			183. Customers Who Never Order Suppose that a website contains two tables, the Customers table and t ... 
