go 操作Etcd

0.安装ETCD包

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

1.初始化client

这里必须了解一下Client的结构

// Client provides and manages an etcd v3 client session.
type Client struct {
   Cluster
   KV
   Lease
   Watcher
   Auth
   Maintenance

   conn *grpc.ClientConn

   cfg      Config
   creds    grpccredentials.TransportCredentials
   resolver *resolver.EtcdManualResolver
   mu       *sync.RWMutex

   ctx    context.Context
   cancel context.CancelFunc

   // Username is a user name for authentication.
   Username string
   // Password is a password for authentication.
   Password        string
   authTokenBundle credentials.Bundle

   callOpts []grpc.CallOption

   lgMu *sync.RWMutex
   lg   *zap.Logger
}

Cluster、KV、Lease…,你会发现它们其实就代表了整个客户端的几大核心功能板块,分别用于:

  • Cluster:向集群里增加etcd服务端节点之类,属于管理员操作。
  • KV:我们主要使用的功能,即操作K-V。
  • Lease:租约相关操作,比如申请一个TTL=10秒的租约。
  • Watcher:观察订阅,从而监听最新的数据变化。
  • Auth:管理etcd的用户和权限,属于管理员操作。
  • Maintenance:维护etcd,比如主动迁移etcd的leader节点,属于管理员操作

2.获取KV对象

实际上client.KV是一个interface,提供了关于k-v操作的所有方法:

2.1put

通过接口的返回,可以看到他是返加一个(*PutResponse, error),PutResponse的结构体如下

其中Header的结构体如下

调用PUT方法,可以看到返回的 结果

2.2Get方法

通过返回值,知道Get返回的是一个(*GetReponse,error),GetResponse的结构体如下

拿到这个GetReponse这个响应值后,要通过这个响应值里面的Kvs,来获取具体的值,

运行上面的方法,结果如下

与ETCD里面存的值是一样的

2.3Lease对象

Lease提供了几个功能:

  • Grant:分配一个租约。
  • Revoke:释放一个租约。
  • TimeToLive:获取剩余TTL时间。
  • Leases:列举所有etcd中的租约。
  • KeepAlive:自动定时的续约某个租约。
  • KeepAliveOnce:为某个租约续约一次。
  • Close:貌似是关闭当前客户端建立的所有租约。

要想实现key自动过期,首先得创建一个租约,它有20秒的TTL:

grantResp中主要使用到了ID,也就是租约ID:

接下来,我们用这个租约来Put一个会自动过期的Key:

在MAIN方法中进行如下调用

2.4事务

etcd中事务是原子执行的,只支持if … then … else …这种表达,能实现一些有意思的场景。

首先,我们需要开启一个事务,这是通过KV对象的方法实现的:

2.5Watch操作

2.6参考

etcd3 API | etcd

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值