Etcd特性学习1——KV操作
0x01 功能分类
Etcd作为一个分布式一致性的KV存储组件,现在的功能远不止于KV存储了。详细了解下其功能特点,有利用在使用它时做出最合适的选择。
通过etcdctl -h
命令可以看到有如下的特性。
- 基本的KV操作 get put txn del watch
- 数据操作 碎片整理 defrag 压缩事件 compaction
- 端点管理 endpoint
- 租期管理 lease
- 锁 lock
- 选举 elec
- 成员管理 member
- 转移leader move-leader
- 角色管理 role
- 快照管理 snapshot
- 运维相关 告警 alarm,状态检测 check,镜像 make-mirror
- 认证管理 auth
- 用户管理 user
居然已经有这么多的特性,不得不感叹开源社区力量的强大。之前也觉得ZooKeeper有许多不错的特性,但因为社区不活跃了,与Etcd对比,已经落后太多了。
0x02 基本的KV操作
基本的KV包含查询get、写入put、删除del、监听watch和事务txn。
2.1 get
仅仅一个get就支持了许多选项。先不管全局的选项。
--consistency
2个取值"l"或者"s",这涉及到了分布式中两种一致性模型,见参考1。简单理解l为linearizability,表示所有客户端任意一时间看到的数据都是一致的。而s代表sequential,只保证一个客户端自己的操作是有序的,自己写的,后面读能读到新的。--count-only
默认为false,为true时,需要和全局的–write-out="fields"联合使用,只返回查询的数量。这可以适用于某些只需要数量的场景,避免传输大量数据。--from-key
查询从某个key开始的所有key,与--limit
联合使用,可以实现分页机制,同样可以减小网络传输的数据量。--keys-only
默认为false,查询默认会返回key和value,同样某些场景下只需要key,也可以减轻网络压力。--limit
限制获取的key数量。--order
支持排序方式,升序、降序。--prefix
按照前缀方式获取。类似mysql中的前缀匹配。--print-value-only
默认为false,只返回值。意义同前述。--rev
获取特定revsion的值。Etcd是支持子版本的,k8s就是利用这个机制实现pod回滚的。--sort-by
指定排序的键。支持创建时间、key、修改时间、值和版本。
同时注意到get也支持一次获取多个,也支持一个范围。通过查看源码可以知道,这在Etcd协议中是通过range来实现的。
2.2 put
put的选项就少了许多。
--ignore-lease
也就是不更新lease。--ignore-value
不更新value。--lease
指定lease的ID。--prev-kv
返回修改前的key/value。
lease是Etcd支持临时节点的一种实现方式,ZooKeeper中的“临时节点”。相当于租约,过期了数据就被清除了。
2.3 del
删除,选项也比较少。
--from-key
与get类似,支持批量删除。--prefix
默认为false,打开时代表通过前缀删除。--prev-kv
返回删除前的key和value。
2.4 watch
watch用来监听一个key或者一系列key的变化,比如被PUT、DEL。可以基于这个来实现事件通知,一次watch是一直有效的(至少从etcdctl看来是这样的),与ZooKeeper不同。
选项也不多。
--interactive
默认为false,打开是为交互模式。可以一次运行watch多个节点。测试起来非常方便。--prefix
同前面。watch指定前缀的key。--prev-kv
同前,变化时,返回变化前的。--progress-notify
默认为false,打开时代表server端周期性发送响应,即使数据没有变化。推送的间隔是服务端根据自己的负载情况确定的,对客户端来说不是很明确。--rev
代表watch特定子版本起始值。
2.6 txn
txn是事务操作。可以一次请求中进行多个put、del操作。
一般是开启--interactive
模式。注意的是前置判断完成后,要按两个回车结束当前的操作。
$ etcdctl txn --interactive
compares:
value("user1") = "ok1" // 输入后按两次entersuccess requests (get, put, del):
put user1 "ok" // 输入后按两次enterfailure requests (get, put, del):
put user2 "ok2" // 输入后按两次enterFAILUREOK
0x03 小结
Etcd基本的KV操作提供了非常丰富的特性,可以灵活应用于各种场景。对相关服务设计提供了不错的参考。下一步会继续学习后面的内容。
0x04 参考
- https://cse.buffalo.edu/~stevko/courses/cse486/spring13/lectures/26-consistency2.pdf
Etcd特性学习1——KV操作相关推荐
- jdk7新特性学习笔记
jdk7新特性学习笔记 从网络down了视频看,记录下学过的东西. 1.二进制字面量 JDK7开始,可以用二进制来表示整数(byte,short,int和long),语法:在二进制数值前面加 0b或者 ...
- Java8新特性学习_001_(Lambda表达式,函数式接口,方法引用,Stream类,Optional类)
目录 ■代码 ■代码运行结果 ■代码说明 ・44行:Stream的.foreach方法ー参数类型:函数式接口 ・82行:Interface中,default方法 ・92行 Stream的.max方 ...
- Java8新特性学习笔记
Java8新特性学习笔记 文章目录 Java8新特性学习笔记 一.接口和日期处理 1.接口增强 1.1.JDK8以前 VS JDK8 1)接口定义: 1.2.默认方法(default) 1)默认方法格 ...
- eclipsevue代码怎么运行_[Java教程]使用eclipse初步学习vue.js操作
[Java教程]使用eclipse初步学习vue.js操作 0 2017-11-26 19:00:06 一.vue.js的初步认识 https://unpkg.com/vue ">vu ...
- 以python入门教程新世界-国外旅行也不忘学习Python:Python 操作列表001
Python从小白到入门 ~ Part 4 操作列表 001 Python是一门杰出的语言,值得你去学习,咱们现在就开始吧.--<Python编程从入门到实践>P44-P50 人生--这个 ...
- 【Python基础】零基础学习Python列表操作
作者:来自读者投稿 整理:Lemon 出品:Python数据之道 " 「Python数据之道」导读:本文来自读者投稿,Python数据之道早些时候也发过 Python 列表相关的文章,可以前 ...
- python设置文件权限_PYTHON学习之文件操作;
PYTHON学习之文件操作: 文件内容替换 for line in flielinput.input("filepath",inplace=1): line = line.repa ...
- PyTorch框架学习三——张量操作
PyTorch框架学习三--张量操作 一.拼接 1.torch.cat() 2.torch.stack() 二.切分 1.torch.chunk() 2.torch.split() 三.索引 1.to ...
- c语言行列坐标是先行后j,C语言学习之行列操作
C语言学习之队列操作 本文件为队列操作的接口: /*queue.h*/ #ifndef _SEQQUEUE_H_ #define _SEQQUEUE_H_ #define QUEUE_MAX 15 t ...
最新文章
- Android Studio导入github项目详解
- 什么地方容易刷出ak_男人会用什么理由拒绝表白?
- linux串口tx缓冲区大小,[Linux C]自己写的串口缓冲区
- Java之volatile
- scale data:线性空间映射
- atitit.软件开发--socket框架选型--netty vs mina j
- 云桌面终端_云桌面是否真的有被夸大,看完你就知道了
- myeclipse安装使用svn
- win10系统无法登录ftp服务器失败,Win10系统下ftp连接失败提示“连接已超时”如何解决?...
- stm32数据手册boot_stm32f103中文手册.pdf
- php网站安装有密钥,win10安装时跳过密钥
- matlab中的textscan函数
- 2019春季学期个人总结
- A_A03_007 CH32串口软件安装与CH32程序串口下载
- Flutter如何有效地退出程序
- 2022年中国农业现代化发展现状
- arm linux not syncing,Kernel panic - not syncing: No init found(busybox制作根文件
- 如何学习VB最新总结
- Jenkins Pipelin扩展
- Symbian OS SDKs简介(转)
热门文章
- java中自加(++)和自减(--)运算符
- shell脚本中的结构化命令(if-then-else、case、for、while、until) 脚本中的循环控制
- git支持的协议大全
- APISpace 身份证识别API
- 微信小程序开发【一】-- 初识小程序
- 用双眼无法扑捉 索尼Z2的细节改动
- 【AFSA TSP】基于matlab改进的人工鱼群算法求解旅行商问题【含Matlab源码 1479期】
- 浅谈餐饮业如何实施ERP(转)
- ModuleNotFoundError: No module named xxx 的原因和万能解决办法
- css怎么做向左拉伸动画_CSS核心动画技巧:重力,挤压和拉伸