第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>=访问表示寄存器时 命令行模式也被激活 ...
随机推荐
- ThreadPool(线程池)
WPF使用ThreadPool.QueueUserWorkItem线程池防界面假死 时间:2012-01-09 20:44来源:http://luacloud.com 作者:luacloud 点击:1 ...
- python字典方法
本文参考自<python基础教程 (第二版)> 操作 语法 举例 结果 建立字典 dict() 1.以关键字参数建立字典 2.以其他映射作为参数建立字典 1.d = dict(name=' ...
- Python爬虫之利用正则表达式爬取内涵吧
首先,我们来看一下,爬虫前基本的知识点概括 一. match()方法: 这个方法会从字符串的开头去匹配(也可以指定开始的位置),如果在开始没有找到,立即返回None,匹配到一个结果,就不再匹配. 我们 ...
- ural 2012 About Grisha N.(水)
2012. About Grisha N. Time limit: 1.0 secondMemory limit: 64 MB Grisha N. told his two teammates tha ...
- 20180403_调bug_大地保险_jar包冲突
一.异常现象 他们程序在本地通过java形式直接跑起来的时候,是正常的. 但是测试服务器上,程序跑到一半就不继续往下走了,而且,也不报错,日志里面没有任何信息. 二.异常解决 1.核心思想 抽丝剥茧, ...
- I.MX6 make menuconfig进入x86模式
/************************************************************************ * I.MX6 make menuconfig进入x ...
- BZOJ - 2588 Spoj 10628. Count on a tree (可持久化线段树+LCA/树链剖分)
题目链接 第一种方法,dfs序上建可持久化线段树,然后询问的时候把两点之间的所有树链扒出来做差. #include<bits/stdc++.h> using namespace std; ...
- LeetCode LFU Cache
原题链接在这里:https://leetcode.com/problems/lfu-cache/?tab=Description 题目: Design and implement a data str ...
- Python利用itchat库向好友或者公众号发消息
首先获得好友或者公众号的UserName 1.获取好友UserName #coding=utf8 import itchat itchat.auto_login(hotReload=True) #想给 ...
- laravel vendor目录的安装