golang etcd/clientv3实现Ops联合kv操作写入

    1. 实现联合kv操作仅仅是为了将一连串的put, get, delete, txn组合,减少大量kv操作的代码量,单独写一样可以实现
    1. 联合kv操作和事务也有区别, 因为事务会对KeyValue对象添加条件, 而这里并没有.
    1. 代码中向相关注释,直接上代码

1.client初始化

package cli
var Cli *clientv3.Client

func GetCli() (err error) {
   
   
	// 1. etcd连接配置
	config := clientv3.Config{
   
   }
	config.Endpoints = []string{
   
   "huawei:3001"}
	config.DialTimeout = time.Second * 5
	config.Username = "root"
	config.Password = "123"

	// 2. 获取cted cli对象
	Cli, err = clientv3.New(config)
	if err != nil {
   
   
		log.Fatalf("init etcd cli failed! err:%v", err)
	}
	log.Infoln("init etcd cli success!")
	return
}

2.OPS实现

package op

import (
	"context"
	"fmt"
	"third/database/etcd/cli"

	log "github.com/sirupsen/logrus"
	"go.etcd.io/etcd/clientv3"
)

/*
1.创建ops对象(kv操作集),这里的定义和单独使用kv操作没区别,但这里是为了实现put,get,del,txn一个联合kv操作.
		clientv3.OpDelete()		kv.Delete
		clientv3.OpGet			kv.Get
		clientv3.OpPut			kv.Put
		clientv3.OpTxn			kv.Txn
2.获取ops中的每个op作为参数传入client.Do()方法获取opResponse,使用opResponse的方法获取对应kv操作response

*/

func Op() {
   
   
	// 初始化cli连接
	cli.GetCli()

	
### 使用 GoLangEtcd 的基本概念 GoLang 是一种高效的编程语言,广泛用于构建分布式系统和微服务架构。Etcd 是一个分布式的键值存储工具,通常被用来保存配置数据、元数据以及实现分布式锁等功能。两者结合可以很好地支持现代云原生应用的需求。 以下是关于如何在 Go 中使用 Etcd 的一些核心知识点: #### 安装依赖库 要开始使用 Etcd,在项目中需要引入官方的客户端库 `go.etcd.io/etcd/clientv3`。可以通过以下命令安装该库: ```bash go get go.etcd.io/etcd/clientv3 ``` 此操作会下载并安装必要的包来连接到 Etcd 集群[^1]。 #### 连接到 Etcd 实例 下面是一个简单的代码片段展示如何创建与 Etcd 的连接,并执行基础的操作(如写入和读取键值对): ```go package main import ( "context" "fmt" "log" clientv3 "go.etcd.io/etcd/client/v3" ) func main() { cli, err := clientv3.New(clientv3.Config{ Endpoints: []string{"localhost:2379"}, // 替换为实际的 Etcd 地址 DialTimeout: 5 * time.Second, }) if err != nil { log.Fatalf("无法连接至 Etcd:%v", err) } defer cli.Close() ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second) _, err = cli.Put(ctx, "key1", "value1") // 设置 key-value 对 cancel() if err != nil { log.Fatal(err) } fmt.Println("成功设置键值对") getResp, err := cli.Get(context.TODO(), "key1") // 获取指定 Key 值 if err != nil { log.Fatal(err) } for _, ev := range getResp.Kvs { fmt.Printf("%s : %s\n", ev.Key, ev.Value) // 打印获取的结果 } } ``` 上述程序展示了如何向 Etcd 存储数据并通过其检索出来[^4]。 #### 最佳实践建议 当开发涉及 Etcd 的应用程序时,应考虑采用某些最佳实践以提高性能和可靠性。例如,合理管理上下文超时时间能够防止长时间阻塞调用;利用事务机制保障一致性等[^2]。 #### 处理复杂场景下的 Pub/Sub 模型 如果希望基于 Etcd 构建发布订阅模式,则可借助 Watch API 来监听特定路径的变化情况。如下所示即为一段简单演示代码: ```go rChan := cli.Watch(context.Background(), "/some/path/") for wresp := range rChan { for _, evt := range wresp.Events { fmt.Printf("Type: %s Key:%q OldValue:%q NewValue:%q\n", evt.Type, string(evt.Kv.Key), string(evt.PrevKv.Value), string(evt.Kv.Value)) } } ``` 这里我们监视某个目录下发生的所有事件,并打印相关信息[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值