golang 使用Etcd

Etcd是一款基于Raft算法的高可用键值存储系统,适用于服务发现、配置中心及分布式锁等场景。它提供了RESTful API接口,支持集群部署,确保数据的一致性和高可用性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Etcd是高可用的k-v存储,可以配置共享和服务发现

类似于zookeeper和consul

提供restful的api接口

基于raft算法的强一致性,高可用的服务存储目录

使用

import (
	"fmt"
	"time"

	"github.com/etcd-master/clientv3"
)

func main() {
	client, err := clientv3.New(clientv3.Config{
		Endpoints:   []string{"lcoalhost:2379", "lcoalhost:23791", "lcoalhost:23792"},
		DialTimeout: 5 * time.Second,
	})

	if err != nil {
		fmt.Println("conn failed")
		return
	}

	fmt.Println("conn succ")
	defer client.Close()
}

场景:服务发现和服务注册,配置中心,分布式锁,master选举

### 使用 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、付费专栏及课程。

余额充值