客户端与服务端之间存在的连接,那么这样的一个连接我们就称之为会话,也就是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命令的使用的更多相关文章

  1. 第4章 ZK基本特性与基于Linux的ZK客户端命令行学习

    第4章 ZK基本特性与基于Linux的ZK客户端命令行学习 4-1 zookeeper常用命令行操作 4-2 session的基本原理与create命令的使用

  2. 第4章 ZK基本特性与基于Linux的ZK客户端命令行学习 4-1 zookeeper常用命令行操作

    ls path [watch] watch是一个监督者.quota是zookeeper的子目录.目录就是节点的意思,对于zookeeper来说它是以一个节点来说的,所以说/就是根节点,zookeepe ...

  3. 《Linux命令行与shell脚本编程大全》 第二十二章 学习笔记

    第二十二章:使用其他shell 什么是dash shell Debian的dash shell是ash shell的直系后代,ash shell是Unix系统上原来地Bourne shell的简化版本 ...

  4. 如何创建一个基于命令行工具的跨平台的 NuGet 工具包

    命令行可是跨进程通信的一种非常方便的手段呢,只需启动一个进程传入一些参数即可完成一些很复杂的任务.NuGet 为我们提供了一种自动导入 .props 和 .targets 的方法,同时还是一个 .NE ...

  5. 让你如绅士般基于描述编写 Python 命令行工具的开源项目:docopt

    作者:HelloGitHub-Prodesire HelloGitHub 的<讲解开源项目>系列,项目地址:https://github.com/HelloGitHub-Team/Arti ...

  6. 《Entity Framework 6 Recipes》中文翻译系列 (40) ------ 第七章 使用对象服务之从跟踪器中获取实体与从命令行生成模型(想解决EF第一次查询慢的,请阅读)

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 7-5  从跟踪器中获取实体 问题 你想创建一个扩展方法,从跟踪器中获取实体,用于数 ...

  7. 《Linux命令行与shell脚本编程大全》第二十二章 gawk进阶

    gawk是一门功能丰富的编程语言,你可以通过它所提供的各种特性来编写好几程序处理数据. 22.1 使用变量 gawk编程语言支持两种不同类型的变量: 内建变量和自定义变量 22.1.1 内建变量 ga ...

  8. 《Practical Vim》第五章:命令行模式

    前言 出于历史原因,命令行模式又叫 Ex 模式,它具有的功能有: 读写文件:比如 :edit, :write 等等 创建标签页或者窗口:比如 :tabnew :split 操作缓存区,比如: bnex ...

  9. vim第五章 命令行模式

    vim第五章命令行模式 技巧 27 结识vim的命令行模式 在命令行模式中执行的命令有被称作ex命令    在按/调出查找提示符或者<C-r>=访问表示寄存器时 命令行模式也被激活     ...

随机推荐

  1. WPF中如何在文本外面加虚线外框

    WPF中如何在文本外面加虚线外框 昨天突然被问到如何在wpf里面给一段文本加个虚线外框,由于有一段时间没玩wpf了,一时还真没想出来,虽然大概有个思路,但是也不保证正确.今天回到家,闲着没事情也就随便 ...

  2. VS2015问题

  3. ionic2——环境配置篇

    环境配置 安装nodeJS 配置cnpm 安装ionic2 安装cordova 安装java sdk 安装android sdk(在项目最后打包时app的时候会用到,前期是在浏览器环境测试开发暂时不需 ...

  4. LeetCode OJ:Construct Binary Tree from Preorder and Inorder Traversal(从前序以及中序遍历结果中构造二叉树)

    Given preorder and inorder traversal of a tree, construct the binary tree. Note:You may assume that ...

  5. java入门学习(1)一简介及其基础特点

    分类: java基础 1.为什么java如此流行,为什么历史选择了它? 因为它拥有全新的编程思想,更接近人们的语言习惯,由于其编译器把代码编译成字节码,然后再不同的平台上运行分别用不同的虚拟机去解释字 ...

  6. vbox sethduuid

    laozha@abc$ /usr/bin/vboxmanage internalcommands sethduuid /ud1/VBOX/centos7/CentOS7.vdi UUID change ...

  7. 用javascript实现base64编码器以及图片的base64编码

    前面的话 base-64作为常见的编码函数,在基本认证.摘要认证以及一些HTTP扩展中得到了大量应用.在前端领域,也常常把图片转换为base-64编码在网络中传输.本文将详细介绍base64的原理及用 ...

  8. 仿百度下拉关键词,和关键词的小demo

    自己做项目时用到的仿百度下拉关键词 代码: $(function(){ var oTxt = document.getElementById('search_text'); oTxt.onkeyup ...

  9. 机器学习:集成学习(OOB 和 关于 Bagging 的更多讨论)

    一.oob(Out - of - Bag) 定义:放回取样导致一部分样本很有可能没有取到,这部分样本平均大约有 37% ,把这部分没有取到的样本称为 oob 数据集: 根据这种情况,不对数据集进行 t ...

  10. $timeout()定时器

    非常不幸的一点是,人们似乎常常将AngularJS中的$timeOut()函数看做是一个内置的.无须在意的函数.但是,如果你忘记了$timeOut()的回调函数将会造成非常不好的影响,你可能会因此遇到 ...