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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Golang测试func TestXX(t *testing.T)的使用详解

    Golang测试func TestXX(t *testing.T)的使用详解

    一般Golang中的测试代码都以xxx_test.go的样式,在命名测试函数的时候以Testxx开头,下面给大家介绍Golang测试func TestXX(t *testing.T)的使用,感兴趣的朋友跟随小编一起看看吧
    2024-08-08
  • Go语言中实现完美错误处理实践分享

    Go语言中实现完美错误处理实践分享

    Go 语言是一门非常流行的编程语言,由于其高效的并发编程和出色的网络编程能力,越来越受到广大开发者的青睐。本文我们就来深入探讨一下Go 语言中的错误处理机制吧
    2023-04-04
  • 在Visual Studio Code中配置GO开发环境的详细教程

    在Visual Studio Code中配置GO开发环境的详细教程

    这篇文章主要介绍了在Visual Studio Code中配置GO开发环境的详细教程,需要的朋友可以参考下
    2017-02-02
  • 基于Golang实现Excel表格的导入导出功能

    基于Golang实现Excel表格的导入导出功能

    最近项目开发中有涉及到Excel的导入与导出功能,特别是导出表格时需要特定的格式,所以本文给大家介绍了基于Golang实现Excel表格的导入导出功能,文中通过代码示例和图文介绍的非常详细,需要的朋友可以参考下
    2023-12-12
  • 深入了解Go语言中web框架的中间件运行机制

    深入了解Go语言中web框架的中间件运行机制

    大家在使用iris框架搭建web系统时,一定会用到中间件。那么你了解中间件的运行机制吗?你知道为什么在iris和gin框架的请求处理函数中要加c.Next()函数吗?本文就和大家一起探究该问题的答案
    2023-02-02
  • go generate代码自动生成指南

    go generate代码自动生成指南

    这篇文章主要介绍了go generate代码自动生成指南,本文将探讨 go generate 命令的使用方法、原理以及一些实际应用场景,希望读者能够更好地理解和运用这个强大的工具
    2024-01-01
  • 如何使用腾讯云go sdk 查询对象存储中最新文件

    如何使用腾讯云go sdk 查询对象存储中最新文件

    这篇文章主要介绍了使用腾讯云go sdk 查询对象存储中最新文件,这包括如何创建COS客户端,如何逐页检索对象列表,并如何对结果排序以找到最后更新的对象,我们还展示了如何优化用户体验,通过实时进度更新和检索多个文件来改进程序,需要的朋友可以参考下
    2024-03-03
  • 手把手带你走进Go语言之语法基础解析

    手把手带你走进Go语言之语法基础解析

    这篇文章主要介绍了手把手带你走进Go语言之语法基础,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • golang使用jaeger进行链路追踪

    golang使用jaeger进行链路追踪

    链路追踪是指在分布式系统中,将一次请求的处理过程进行记录并聚合展示的一种方法,目的是将一次分布式请求的调用情况集中在一处展示,本文将介绍golang如何使用jaeger进行链路追踪,需要的朋友可以参考下
    2024-06-06
  • golang xorm 自定义日志记录器之使用zap实现日志输出、切割日志(最新)

    golang xorm 自定义日志记录器之使用zap实现日志输出、切割日志(最新)

    这篇文章主要介绍了golang xorm 自定义日志记录器,使用zap实现日志输出、切割日志,包括连接postgresql数据库的操作方法及 zap日志工具 ,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-10-10

最新评论