Go使用Etcd

Go使用Etcd

clientv3.New(clientv3.Config{})创建etcd客户端,在使用etcd客户端中具体操作与配置与etcdctl中的指令,参数类似,所以非常容易理解每个配置的含义。

cli, err := clientv3.New(clientv3.Config{})

下面将讲解一下clientv3.Config类

type Config struct {
   // 配置etcd ip
   Endpoints []string `json:"endpoints"`

   // 更新端点及其最新成员的间隔,0为禁止自动同步,默认禁止
   AutoSyncInterval time.Duration `json:"auto-sync-interval"`

   // 建立连接失败的超时时间
   DialTimeout time.Duration `json:"dial-timeout"`

   // 存活探针时间
   DialKeepAliveTime time.Duration `json:"dial-keep-alive-time"`

   // 存活探针发送请求等待时间
   DialKeepAliveTimeout time.Duration `json:"dial-keep-alive-timeout"`

   //是客户端请求发送限制,以字节为单位。
  // 如果为 0,则默认为 2.0 MiB (2 * 1024 * 1024)。
  // 确保 "MaxCallSendMsgSize" < 服务器端默认发送/接收限制。
   MaxCallSendMsgSize int

   // MaxCallRecvMsgSize 是客户端响应接收限制。
  // 如果为0,则默认为“math.MaxInt32”,因为范围响应可以
  // 轻松超过请求发送限制。
  // 确保 "MaxCallRecvMsgSize" >= 服务器端默认发送/接收限制。
   MaxCallRecvMsgSize int

   // TLS 配置
   TLS *tls.Config

   // 用户名是用于认证的用户名。
   Username string `json:"username"`

   // 密码是用于认证的密码。
   Password string `json:"password"`

   // 设置后将拒绝针对过时的集群创建客户端。
   RejectOldCluster bool `json:"reject-old-cluster"`

   DialOptions []grpc.DialOption
   Context context.Context
   Logger *zap.Logger
   LogConfig *zap.Config

   // 设置后将允许客户端在没有任何活动流 (RPC) 的情况下向服务器发送 keepalive ping。
   PermitWithoutStream bool `json:"permit-without-stream"`

}

使用

当我们创建客户端后,就要进行一系列的操作了,接下来将展示常使用的方法与其配置。

GET

通过键获取值,例子

cli.Get(ctx, "foo", clientv3.WithSort(clientv3.SortByKey, clientv3.SortAscend))

Get(ctx context.Context, key string, opts ...OpOption) (*GetResponse, error)

Get方法总共有三个参数,第一个是上下文信息,第二个是要获取的键,而第三个参数是一个配置数组其目的主要是进行查询过滤、排序的操作。接下来分析几个常用的配置

package clientv3
WithPrefix() // 前缀匹配获取所有匹配的key与value
WithLimit(n int64) // 获取的所有最大量,比如你用前缀匹配到了两个,而这里值设置了1 那么就会返回1个key与value
WithSort(target SortTarget, order SortOrder) //对查询的键值对进行排序,target参数可以设置排序字段有SortByKey、SortByVersion、SortByCreateRevision、SortByModRevision、SortByValue,order参数可以设置排序方式,SortNone、SortAscend(升序)、SortDescend(降序)
WithFromKey() //获取比键大的键的值
WithKeysOnly() //只获取键
WithCountOnly() // 只返回键匹配的键的个数
Put

通过键更新或创建值

cli.Put(ctx, "foo", "hello", clientv3.WithLease(clientv3.LeaseID(34243242)))

Put(ctx context.Context, key, val string, opts ...OpOption) (*PutResponse, error)

第二个参数是键,第三个参数是要创建或更新的值,第四个参数是put的配置数组。接下来分析几个常用的配置

WithLease(leaseID LeaseID) // 为键绑定租约ID
WithIgnoreLease() //使用当前租约更新值 不能与上面配置公用
WithPrevKV()//返回修改前的值
del

根据键删除值

cli.Delete(ctx, "foo", clientv3.WithPrefix())
Delete(ctx context.Context, key string, opts ...OpOption) (*DeleteResponse, error)

删除配置与GET配置基本类似,其中WithPrevKV()返回的是被删除的键值对

Txn

创建一个事务

cli.Txn().If(clientv3.Compare(Value(k1), ">", v1)).Then(clientv3.OpGet(), clientv3.OpDelete()).Else(clientv3.OpGet(), clientv3.OpDelete()).Commit()

具体用法为在if中填写判断语句,在then中填写过程,commit进行提交操作

其中then与else运行的是操作数组,格式为

OpPut() //其中的参数与上文的put一样,只是缺少了ctx
OpDelete()
OpGet()
Watch

监听指定的键,当发生更新、删除等事件时进行响应

Watch(ctx context.Context, key string, opts ...OpOption) WatchChan //返回值是一个管道

参数配置中主要是WithPrevKV(),它主要功能是获取变化前的值。其余配置与GET过滤配置一致

WithFilterPut()//过滤put事件
WithFilterDelete() //过滤delete事件
Leases
cli.Leases() //获取所的租约
type Lease interface {
	// 创建一个租约,ttl设置租约事件
	Grant(ctx context.Context, ttl int64) (*LeaseGrantResponse, error)

	// 根据租约ID删除租约
	Revoke(ctx context.Context, id LeaseID) (*LeaseRevokeResponse, error)

	// 获取租约信息
	TimeToLive(ctx context.Context, id LeaseID, opts ...LeaseOption) (*LeaseTimeToLiveResponse, error)

	// 获取所有租约
	Leases(ctx context.Context) (*LeaseLeasesResponse, error)

	// 给ID租约长久有效
	KeepAlive(ctx context.Context, id LeaseID) (<-chan *LeaseKeepAliveResponse, error)

	// 续订一次
	KeepAliveOnce(ctx context.Context, id LeaseID) (*LeaseKeepAliveResponse, error)

	Close() error
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Golang中调用etcd,可以使用etcd的Go客户端库来实现。以下是一个简单的示例代码,展示如何使用Golangetcd进行交互: 首先,您需要导入etcd的Go客户端库,可以使用以下命令安装: ```shell go get go.etcd.io/etcd/client/v3 ``` 然后,在您的代码中导入所需的包: ```go import ( "context" "fmt" "go.etcd.io/etcd/client/v3" ) ``` 接下来,您可以创建一个etcd客户端来连接到etcd服务器: ```go endpoints := []string{"http://localhost:2379"} // etcd服务器的地址 config := client.Config{ Endpoints: endpoints, DialTimeout: 5 * time.Second, // 连接超时时间 } client, err := client.New(config) if err != nil { // 错误处理 } defer client.Close() ``` 现在,您可以使用客户端进行一些基本的操作,例如设置键值对、获取键值对、删除键等: ```go // 设置键值对 ctx := context.TODO() _, err := client.Put(ctx, "mykey", "myvalue") if err != nil { // 错误处理 } // 获取键值对 resp, err := client.Get(ctx, "mykey") if err != nil { // 错误处理 } for _, kv := range resp.Kvs { fmt.Printf("Key: %s, Value: %s\n", kv.Key, kv.Value) } // 删除键 _, err = client.Delete(ctx, "mykey") if err != nil { // 错误处理 } ``` 这只是一个简单的示例,您可以根据自己的需求使用etcd提供的更多功能和操作。请注意,此示例假定您已经在本地运行了etcd服务器,并将地址设置为`http://localhost:2379`。您需要根据实际情况更改这些配置。 希望这个示例能帮助您开始使用Golangetcd进行交互!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值