etcd 是一个分布式的键值存储系统,提供了丰富的 API 用于操作和管理键值对。etcd 的 API 基于 gRPC 和 HTTP/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