Go语言操作etcd的示例详解

 更新时间:2024年03月14日 10:32:28   作者:别人家的孩子zyh  
etcd是使用Go语言开发的一个开源的、高可用的分布式key—value存储系统,可以用于配置共享和服务的注册和发现,下面我们就来看看Go语言是如何操作etcd的吧

etcd介绍

etcd是使用Go语言开发的一个开源的、高可用的分布式key—value存储系统,可以用于配置共享和服务的注册和发现,基于raft算法实现具有强一致性

etcd中涉及了数据一致性、多版本并发控制、watch监控、磁盘IO读写等知识点

etcd的特性:

1.简单:etcd的安装简单,为用户提供了HTTP的接口,使用也很简单

2.存储:etcd的基本功能,基本信息存储在文件中

3.Watch机制:watch指定的键的更改会通知

4.安全通信:SSL证书验证

5.高性能:2K/s读操作,提供了基准测试的工具

6.一致可靠:raft一致性算法

类似的项目有zookeeper和consul。

etcd具有以下的特点:

1.完全复制:集群中的每个节点都可以使用完整的存档

2.高可用性:Etcd可用于避免硬件的单点故障或网络问题

3.一致性:每次读取都会返回跨多主机的最新写入

4.简单:包括一个定义良好、面向用户的API(gRPC)

5.安全:实现了带有可选的客户端证书身份验证的自动化TLS

6.快速:每秒10000次写入的基准速度

7.可靠:使用Raft算法实现了强一致、高可用的服务存储目录

etcd的常见分布式场景:

1.键值对存储

2.服务注册与发现

3.消息订阅与发布

4.分布式锁

go语言操作etcd

首先在后台启动etcd

写一段go代码

package main

import (
	"context"
	"fmt"
	clientv3 "go.etcd.io/etcd/client/v3"
	"time"
)

func main() {
	// 创建客户端,连接etcd
	cli, err := clientv3.New(clientv3.Config{
		Endpoints:   []string{"127.0.0.1:2379"},
		DialTimeout: 5 * time.Second,
	})
	if err != nil {
		fmt.Printf("connect to etcd failed, err:%v\n", err)
		return
	}
	fmt.Println("connect to etcd success")
	defer cli.Close()
	str := `[{"path":"d:/logs/s4.logs","topic":"s4_logs"},{"path":"d:/logs/web.logs","topic":"web_logs"}`
	// put操作
	_, err = cli.Put(context.TODO(), "collect_log_conf", str)
	if err != nil {
		fmt.Printf("put to etcd failed, err:%v\n", err)
		return
	}
	 get操作
	resp, err := cli.Get(context.TODO(), "collect_log_conf") // 获取指定Key的值
	if err != nil {
		fmt.Printf("get to etcd failed")
		return
	}
	for _, ev := range resp.Kvs {
		fmt.Printf("key:%s,value:%s\n", ev.Key, ev.Value)
	}
	 delete 删除key
	//if _,err = cli.Delete(context.TODO(), "testetcd");err != nil{
	//	fmt.Println("delete key failed")
	//}else{
	//	fmt.Println("delete key success")
	//}
}

也可以直接使用ectdctl工具查看key

etcdctl.exe --endpoints=127.0.0.1:2379 get collect_log_conf

到此这篇关于Go语言操作etcd的示例详解的文章就介绍到这了,更多相关Go操作etcd内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Go设计模式之享元模式讲解和代码示例

    Go设计模式之享元模式讲解和代码示例

    享元是一种结构型设计模式,它允许你在消耗少量内存的情况下支持大量对象,模式通过共享多个对象的部分状态来实现上述功能,换句话来说,享元会将不同对象的相同数据进行缓存以节省内存,本文就将通过代码示例给大家详细介绍一下享元模式
    2023-06-06
  • Go语言中序列化与反序列化示例详解

    Go语言中序列化与反序列化示例详解

    我们的数据对象要在网络中传输或保存到文件,就需要对其编码和解码动作,Go语言当然也支持所有这些编码格式,下面这篇文章主要给大家介绍了关于Go语言中序列化与反序列化的相关资料,需要的朋友可以参考下
    2022-07-07
  • go高并发时append方法偶现错误解决分析

    go高并发时append方法偶现错误解决分析

    这篇文章主要为大家介绍了go高并发时append方法偶现错误解决分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • golang 两个go程轮流打印一个切片的实现

    golang 两个go程轮流打印一个切片的实现

    这篇文章主要介绍了golang 两个go程轮流打印一个切片的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • Go 如何批量修改文件名

    Go 如何批量修改文件名

    这篇文章主要介绍了Go 批量修改文件名的实现方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-05-05
  • Golang请求fasthttp实践

    Golang请求fasthttp实践

    本文主要介绍了Golang请求fasthttp实践,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • Go语言中Struct与继承与匿名字段和内嵌结构体全面详解

    Go语言中Struct与继承与匿名字段和内嵌结构体全面详解

    这篇文章主要介绍了Go语言中Struct与继承与匿名字段和内嵌结构体,Go语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性,感兴趣的可以了解一下
    2023-04-04
  • 深入理解Go Gin框架中间件的实现原理

    深入理解Go Gin框架中间件的实现原理

    在Go Gin框架中,中间件是一种在请求处理过程中插入的功能模块,它可以用于处理请求的前置和后置逻辑,例如认证、日志记录、错误处理等,本文将给大家介绍一下Go Gin框架中间件的实现原理,需要的朋友可以参考下
    2023-09-09
  • Go并发编程之死锁与活锁的案例分析

    Go并发编程之死锁与活锁的案例分析

    死锁就是在并发程序中,两个或多个线程彼此等待对方完成操作,从而导致它们都被阻塞,并无限期地等待对方完成;活锁就是程序一直在运行,但是无法取得进展。本文将从一些案例出发,分析一下它们,希望对大家有所帮助
    2023-04-04
  • golang原生实现JWT的示例代码

    golang原生实现JWT的示例代码

    在Go中实现JWT验证,可以通过标准库crypto/hmac、crypto/sha256和encoding/base64来编写自己的JWT,本文就详细的来介绍一下,感兴趣的可以了解下
    2023-05-05

最新评论