【ETCD】基于client v3对etcd的基本操作示例

news/2024/12/2 7:26:33/

前置操作:

需要先下载按照client/v3的bao

go get go.etcd.io/etcd/client/v3
1、初始化客户端
package mainimport ("context""log"clientv3 "go.etcd.io/etcd/client/v3""time"
)var cli *clientv3.Client
func init() {// 初始化etcd客户端var err errorcli, err = clientv3.New(clientv3.Config{Endpoints:   []string{"127.0.0.1:2379"}, // 替换为你的etcd集群地址DialTimeout: 5 * time.Second,})if err != nil {log.Fatal(err)}
}
etcdkv_38">2、向etcd写入kv对
// put 向etcd写入数据
func put(key, value string) {response, err := cli.Put(context.Background(), key, value)if err != nil {log.Fatal(err)}log.Printf("write data success,response header is:%s", response.Header.String())
}
etcdkv_51">3、从etcd中读取kv对

使用精确的key获取以及基于前缀方式的获取

// get 获取指定的key数据
func get(key string) {response, err := cli.Get(context.Background(), key)if err != nil {log.Fatal(err)}log.Printf("get data success,response header is:%s, count is:%d", response.Header.String(), response.Count)for _, kv := range response.Kvs {log.Printf("k:%s,value:%s,version:%d, CreateRevision :%d", string(kv.Key), string(kv.Value), kv.Version, kv.CreateRevision)}
}// getValueByPrefix 获取以key开头的数据
func getValueByPrefix(key string) {response, err := cli.Get(context.Background(), key, clientv3.WithPrefix())if err != nil {log.Fatal(err)}log.Printf("get value by prefix data success,response header is:%s", response.Header.String())for _, kv := range response.Kvs {log.Printf("k:%s,value:%s,version:%s", string(kv.Key), string(kv.Value), kv.Version)}
}
etcdkey_81">4、从etcd中更新key
// update 更新key
func update(key, value string) {put(key, value)
}
etcdkey_92">5、从etcd中删除key
func delete(key string, other_key ...string) {response, err := cli.Delete(context.TODO(), key)if err != nil {log.Fatal(err)}log.Printf("delete key success,response header is:%s", response.Header.String())for _, k := range other_key {response, err = cli.Delete(context.TODO(), k)if err != nil {log.Fatal(err)}log.Printf("delete key success,response header is:%s", response.Header.String())}
etcdkey_110">6、监视etcd中key的变化
// watch 监视key的变化
func watch(key string) {// 启动一个 WatcherwatchChan := cli.Watch(context.Background(), key)for watchResp := range watchChan {for _, event := range watchResp.Events {switch event.Type {case mvccpb.PUT:if event.IsCreate() {fmt.Printf("[新增] Key: %s, Value: %s\n", event.Kv.Key, event.Kv.Value)} else {fmt.Printf("[更新] Key: %s, Value: %s\n", event.Kv.Key, event.Kv.Value)}case mvccpb.DELETE:fmt.Printf("[删除] Key: %s\n", event.Kv.Key)}}}
}
package mainimport ("context""log"clientv3 "go.etcd.io/etcd/client/v3""time"
)var cli *clientv3.Clientfunc main() {defer cli.Close()key1 := "key1"key2 := "key2"put(key1, "value1")put(key2, "value2")get(key1)getValueByPrefix("key")update(key1, "value_updated")delete(key1, key2)
}}func init() {// 初始化etcd客户端var err errorcli, err = clientv3.New(clientv3.Config{Endpoints:   []string{"127.0.0.1:2379"}, // 替换为你的etcd集群地址DialTimeout: 5 * time.Second,})if err != nil {log.Fatal(err)}
}

http://www.ppmy.cn/news/1551692.html

相关文章

和鲸科技创始人CEO范向伟出席首届工业智算产业发展研讨会,共话 AI 创新与产业化落地

11 月 22 日,首届工业智算产业发展研讨会在中国工业互联网研究院召开。工业和信息化部党组成员、副部长单忠德,国家信息中心大数据发展部副主任魏颖出席会议并致辞。中国工程院院士、北京化工大学教授高金吉,工业和信息化部信息通信发展司二级…

嵌入式C语言技巧11:当系统崩溃遇上断电危机:如何确保嵌入式系统的绝对安全?

文章目录 导读一、异常捕获后的dump生成二、非正常掉电保护策略三、实验结果展示本文是经过严格查阅相关权威文献和资料,形成的专业的可靠的内容。全文数据都有据可依,可回溯。特别申明:数据和资料已获得授权。本文内容,不涉及任何偏颇观点,用中立态度客观事实描述事情本身…

数学题转excel;数学题库;数学试卷转excel;大风车excel

一、数学试卷转excel 有些需要刷题的朋友,需要将题库数学题转为excel格式,便于管理 前端时间帮一位朋友实现了数学题转excel,包括选择题、填空题、分析题 示例: 二、问题 数学题是最难以处理的试题,理由如下 1、有…

表的操作DDL

创建表 character set 字符集 collate 校验规则 engine 存储引擎;属性要用 ‘,’ 隔开,最后一个属性不加 ‘,’ ,不要忘了括号其中charset utf8 collate utf8_general_ci engine MyIsam;可以不写 create database usr_db; use usr_db; //创建表 user1 c…

Java 多线程编程核心要点全解析:深度探秘关键方法与同步机制

1.Thread 类中的start() 和 run() 方法有什么区别? 在Java编程语言中,Thread 类的 start() 和 run() 方法有重要的区别: start() 方法: 当你调用 start() 方法时,它会启动一个新的线程,并且这个新线程会…

Flink四大基石之State(状态) 的使用详解

目录 一、有状态计算与无状态计算 (一)概念差异 (二)应用场景 二、有状态计算中的状态分类 (一)托管状态(Managed State)与原生状态(Raw State) 两者的…

挑战用React封装100个组件【004】

项目地址 https://github.com/hismeyy/react-component-100 组件描述 组件适用于展示图片的地方,提供了small,medium,large三种大小。可以删除图片,也可以全屏预览图片。 样式展示 前置依赖 今天我们的这个挑战需要用用到了…

高效 Python Web 开发:FastAPI 入门与实践

高效 Python Web 开发:FastAPI 入门与实践 目录 ✨ 1. 安装与环境配置 📦 安装 FastAPI 和 Uvicorn🗂️ 项目目录结构和初始化🚀 创建一个简单的 FastAPI 项目 🛠️ 2. FastAPI 路由与请求处理 🛣️ 基本…