【ETCD】etcd简单入门之基础操作基于etcdctl进行操作

server/2024/12/2 20:18:39/

这里将使用etcdctl命令行工具来进行演示,

etcdkv_2">1、使用put命令向etcd写入kv对

使用etcdctl put命令来设置键值对。put命令接受两个参数:键和值

使用方法:

NAME:put - Puts the given key into the storeUSAGE:etcdctl put [options] <key> <value> (<value> can also be given from stdin) [flags]DESCRIPTION:Puts the given key into the store.When <value> begins with '-', <value> is interpreted as a flag.Insert '--' for workaround:$ put <key> -- <value>$ put -- <key> <value>If <value> isn't given as a command line argument and '--ignore-value' is not specified,this command tries to read the value from standard input.If <lease> isn't given as a command line argument and '--ignore-lease' is not specified,this command tries to read the value from standard input.For example,$ cat file | put <key>will store the content of the file to <key>.OPTIONS:-h, --help[=false]            help for put--ignore-lease[=false]    updates the key using its current lease--ignore-value[=false]    updates the key using its current value--lease="0"               lease ID (in hexadecimal) to attach to the key--prev-kv[=false]         return the previous key-value pair before modification

示例:

# 写入一个键为foo 值为 hello world数据
[root@localhost etcd]# ./etcdctl put foo "hello world"
OK
# 使用put命令需要注意的事项为,当需要插入以“-”开通的值时,将被解释为一个标志,需要先插入--标志来解决该问题
[root@localhost etcd]# ./etcdctl put key3 -- -pzh
OK
[root@localhost etcd]# ./etcdctl get key3
key3
-pzh
etcdkv_57">2、使用get命令从etcd中读取kv对

使用get 命令来获取键对应的值,put命令接受一个参数:键

使用方法:

[root@localhost etcd]# ./etcdctl get --help
NAME:get - Gets the key or a range of keysUSAGE:etcdctl get [options] <key> [range_end] [flags]OPTIONS:--consistency="l"                 Linearizable(l) or Serializable(s)--count-only[=false]              Get only the count--from-key[=false]                Get keys that are greater than or equal to the given key using byte compare-h, --help[=false]                    help for get--keys-only[=false]               Get only the keys--limit=0                         Maximum number of results--order=""                        Order of results; ASCEND or DESCEND (ASCEND by default)--prefix[=false]                  Get keys with matching prefix--print-value-only[=false]        Only write values when using the "simple" output format--rev=0                           Specify the kv revision--sort-by=""                      Sort target; CREATE, KEY, MODIFY, VALUE, or VERSION

示例:

# 获取key为foo的值
[root@localhost etcd]# ./etcdctl get foo
foo
hello world
# 获取前缀为key的所有键 
[root@localhost etcd]# ./etcdctl get key --prefix
key1
v9
key2
v1
etcdKV_101">3、使用del命令从etcd中删除KV对
# 删除键foo
[root@localhost etcd]# ./etcdctl del foo
# 先新增以前缀为key开头的五个键,key1~key5
[root@localhost etcd]# ./etcdctl put key1 v1
OK
[root@localhost etcd]# ./etcdctl put key2 v2
OK
[root@localhost etcd]# ./etcdctl put key3 v3
OK
[root@localhost etcd]# ./etcdctl put key4 v4
OK
[root@localhost etcd]# ./etcdctl put key5 v5
OK
# 按前缀匹配的方式删除所有的key
[root@localhost etcd]# ./etcdctl del --prefix key
5
4、查看ctcd的数据版本
# 查看
[root@localhost etcd]# ./etcdctl get foo -w fields
# 发送响应的集群id
"ClusterID" : 14841639068965178418  
# 响应请求的节点ID
"MemberID" : 10276657743932975437
# 创建key时集群中当前全局数据版本号
"Revision" : 53
# 请求时当前raft主节点的任期号
"RaftTerm" : 10
# 查看的键
"Key" : "foo"
# 当前key创建时候的全局版本号值
"CreateRevision" : 32
# 当前key修改时候的全局版本号值
"ModRevision" : 32
# key的数据版本号
"Version" : 1
# key当前对应的值
"Value" : "v1"
# 使用的租约对应的id,如果没有使用则该值为0
"Lease" : 0
"More" : false
"Count" : 1
5、监控key
  • 使用方法:
# watch的用法参考如下
[root@localhost etcd]# ./etcdctl watch --help
NAME:watch - Watches events stream on keys or prefixesUSAGE:etcdctl watch [options] [key or prefix] [range_end] [--] [exec-command arg1 arg2 ...] [flags]OPTIONS:-h, --help[=false]            help for watch-i, --interactive[=false]     Interactive mode--prefix[=false]          Watch on a prefix if prefix is set--prev-kv[=false]         get the previous key-value pair before the event happens--rev=0                   Revision to start watching
  • 监控单个key
# 在第一个客户端输入如下指令:
[root@localhost etcd]# ./etcdctl watch  foo
PUT
foo
v2
PUT
foo
v3
PUT
foo
v3
# 在第二客户端输入监控命令
[root@localhost etcd]# ./etcdctl watch foo
PUT
foo
v2
PUT
foo
v3
PUT
foo
v3# 其他端口对foo这个键进行操作
[root@localhost etcd]# ./etcdctl put foo v2
OK
[root@localhost etcd]# ./etcdctl put foo v3
OK
[root@localhost etcd]# ./etcdctl put foo v3
OK
  • 监控多个key
# 监控以foo开头的所有键,只要是foo
[root@localhost etcd]# ./etcdctl watch foo --prefix
PUT
foo1
muiltvalue
PUT
foo2
muiltwatch
PUT
foo3
v3
DELETE
foo3
# 另外一个客户端进行put、del操作
[root@localhost etcd]# ./etcdctl put foo1 muiltvalue
OK
[root@localhost etcd]# ./etcdctl put foo2 muiltwatch
OK
[root@localhost etcd]# ./etcdctl put foo3 v3
OK
[root@localhost etcd]# ./etcdctl del foo4
0
[root@localhost etcd]# ./etcdctl del foo3
1

如果删除一个不存在的key时不会唤醒watch的客户端。

etcd_240">6、使用etcd来实现锁

go的代码示例:

package mainimport ("context""fmt"clientv3 "go.etcd.io/etcd/client/v3""go.etcd.io/etcd/client/v3/concurrency""log""time"
)func main() {// 初始化etcd客户端cli, err := clientv3.New(clientv3.Config{Endpoints:   []string{"192.168.188.101:2379"}, // 替换为你的etcd集群地址DialTimeout: 5 * time.Second,})if err != nil {log.Fatal(err)}defer cli.Close()// 创建一个上下文ctx, cancel := context.WithTimeout(context.Background(), 1000*time.Second)defer cancel()// 创建一个新的sessionsession, err := concurrency.NewSession(cli)if err != nil {log.Fatal(err)}defer session.Close()// 使用session创建锁mutualTxn := concurrency.NewMutex(session, "mutex")// 尝试获取锁err = mutualTxn.Lock(ctx)if err != nil {log.Fatal(err)}fmt.Println("Lock acquired")// 模拟一些工作time.Sleep(2 * time.Second)// 释放锁err = mutualTxn.Unlock(ctx)if err != nil {log.Fatal(err)}fmt.Println("Lock released")}

http://www.ppmy.cn/server/146825.html

相关文章

Qt如何改变串口读取数据的频率

在Qt中&#xff0c;通过串口&#xff08;QSerialPort&#xff09;读取数据的频率通常是由以下几个因素决定的&#xff1a; 数据到达的频率&#xff1a;这是由外部设备决定的&#xff0c;Qt程序无法直接控制。读取操作的触发方式&#xff1a;Qt提供了多种方式来读取串口数据&am…

鲲鹏麒麟安装离线版MySQL5.7

最近有项目需求&#xff0c;需要在鲲鹏ARM服务器上安装数据库MySQL5.7&#xff0c;服务器为鲲鹏920&#xff0c;操作系统Kylin Linux Advanced Server release V10 (Tercel) 安装包 下载地址&#xff1a;https://cloud.189.cn/t/JRVnmeEvMRZ3&#xff08;访问码&#xff1a;t…

抽卡代码(简陋) C#

简单写了一个抽卡代码&#xff0c;没有修饰&#xff0c;用起来其实还挺难受的。抽10连的时候按0可以跳过抽取过程。 using System; using System.Collections.Generic; using System.Threading;class Program {static void Main(){//随机数初始化Random random new Random();…

【Linux】-操作系统

&#x1f511;&#x1f511;博客主页&#xff1a;阿客不是客 &#x1f353;&#x1f353;系列专栏&#xff1a;深入代码世界&#xff0c;了解掌握 Linux 欢迎来到泊舟小课堂 &#x1f618;博客制作不易欢迎各位&#x1f44d;点赞⭐收藏➕关注 ​​ 一、冯•诺依曼架构&#xff…

Maven、JAVAWeb、Servlet

知识点目标 1、MavenMaven是什么Maven项目的目录结构Maven的Pom文件Maven的命令Maven依赖管理Maven仓库JavaWeb项目 2.网络基础知识 3、ServletMaven Maven是什么 Maven是Java的项目管理工具&#xff0c;可以构建&#xff0c;打包&#xff0c;部署项目&#xff0c;还可以管理…

【逐行注释】自适应观测协方差R的AUKF(自适应无迹卡尔曼滤波,MATLAB语言编写),附下载链接

文章目录 自适应R的UKF逐行注释的说明运行结果部分代码各模块解释 自适应R的UKF 自适应无迹卡尔曼滤波&#xff08;Adaptive Unscented Kalman Filter&#xff0c;AUKF&#xff09;是一种用于状态估计的滤波算法。它是基于无迹卡尔曼滤波&#xff08;Unscented Kalman Filter&…

【机器学习】梯度消失和梯度爆炸问题

梯度消失&#xff08;Vanishing Gradient&#xff09;和梯度爆炸&#xff08;Exploding Gradient&#xff09;是深度学习训练过程中常见的两种问题&#xff0c;尤其是在使用深层神经网络&#xff08;如深度卷积神经网络或循环神经网络&#xff09;时。这两种问题都会对网络的训…

Java基础常用类库全解析

一、引言 Java 基础常用类库是 Java 编程的重要基石&#xff0c;本文将深入解析这些类库&#xff0c;帮助读者更好地理解和运用 Java 语言。 在 Java 编程中&#xff0c;基础常用类库为开发者提供了丰富的工具和功能&#xff0c;极大地提高了开发效率。这些类库涵盖了多个方面&…