【etcd】etcd_go操作与etcd锁实现原理

etcd 是一个分布式的键值存储系统,提供了丰富的 API 用于操作和管理键值对。etcd 的 API 基于 gRPCHTTP/JSON,支持多种编程语言。以下是 etcd API 的详细讲解,包括核心功能和示例。


1. etcd API 版本

etcd 目前有两个主要的 API 版本:

  • v2 API:早期的 API,基于 HTTP/JSON,功能较为简单。
  • v3 API:当前的推荐版本,基于 gRPC,功能更强大,性能更好。

以下内容主要基于 v3 API


2. etcd v3 API 的核心功能

etcd v3 API 提供了以下核心功能:

2.1 键值操作

  • Put:设置键值对。
  • Get:获取键值对。
  • Delete:删除键值对。
  • Txn:事务操作,支持原子性操作。

2.2 Watch 机制

  • 监听键的变化,当键的值发生变化时触发回调。

2.3 租约(Lease)

  • 为键值对设置租约(TTL),到期后自动删除。

2.4 分布式锁

  • 基于 etcd 的原子操作实现分布式锁。

2.5 集群管理

  • 管理 etcd 集群的成员和状态。

3. etcd v3 API 的使用

3.1 安装 etcd 客户端库

以 Go 语言为例,安装 etcd 客户端库:

go get go.etcd.io/etcd/client/v3

3.2 创建 etcd 客户端

package main

import (
	"context"
	"fmt"
	"log"
	"time"

	"go.etcd.io/etcd/client/v3"
)

func main() {
   
	// 创建 etcd 客户端
	cli, err := clientv3.New(clientv3.Config{
   
		Endpoints:   []string{
   "http://127.0.0.1:2379"}, // etcd 地址
		DialTimeout: 5 * time.Second,
	})
	if err != nil {
   
		log.Fatal(err)
	}
	defer cli.Close()

	fmt.Println("Connected to etcd!")
}

3.3 键值操作

Put:设置键值对
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
_, err = cli.Put(ctx, "/config/database/host", "localhost")
cancel()
if err != nil {
   
	log.Fatal(err)
}
fmt.Println("Put key successfully!")
Get:获取键值对
ctx, cancel = context.WithTimeout
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值