当前位置: 代码网 > it编程>前端脚本>Golang > Go语言操作etcd的示例详解

Go语言操作etcd的示例详解

2024年05月18日 Golang 我要评论
etcd介绍etcd是使用go语言开发的一个开源的、高可用的分布式key—value存储系统,可以用于配置共享和服务的注册和发现,基于raft算法实现具有强一致性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内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com