内容简介:首先获取clientv3:连接etcd:kv是一个用于操作kv的连接,其实它本质上是用了client的conn,为了更加专注于键值对的操作,关闭client后也会使kv无法用。(kv的操作client也能实现)
首先获取clientv3:
go get go.etcd.io/etcd/clientv3
连接etcd:
config := clientv3.Config{
Endpoints:[]string{"192.168.50.250:2379","172.16.196.129:2379"},
DialTimeout:10*time.Second,
}
client,err := clientv3.New(config)
if err != nil {
panic(err)
}
defer client.Close()
kv := clientv3.NewKV(client)
kv是一个用于操作kv的连接,其实它本质上是用了client的conn,为了更加专注于键值对的操作,关闭client后也会使kv无法用。(kv的操作client也能实现)
设置一个超时的context:
ctx,cancleFunc:= context.WithTimeout(context.TODO(),5*time.Second)
context.WithTimeout()会返回一个timerCtx{},并在这个结构体里注入了超时时间。cancleFunc是一个取消操作的函数。put,get等操作是阻塞型操作,context里有一个用于管理超时的select,当时间一到就会隐式执行cancelFunc,使操作停止并返回错误。如果显式的调用cancelFunc()则会立即停止操作,返回错误。
put操作:
putResp,err := kv.Put(ctx,"/job/v3","push the box",clientv3.WithPrevKV()) //withPrevKV()是为了获取操作前已经有的key-value
if err != nil{
panic(err)
}
fmt.Printf("%v",putResp.PrevKv)
getResp,err := kv.Get(ctx,"/job/",clientv3.WithPrefix()) //withPrefix()是未了获取该key为前缀的所有key-value
if err != nil{
panic(err)
}
fmt.Printf("%v",getResp.Kvs)
由于etcd是有序存储键值对的,还可以附加clientv3.WithFromKey(),clientv3.WithLimit()来实现分页获取的效果。
监听etcd集群键的改变:
wc := client.Watch(context.Background(), "/job/", clientv3.WithPrefix(),clientv3.WithPrevKV())
for v := range wc {
if v.Err() != nil {
panic(err)
}
for _, e := range v.Events {
fmt.Printf("type:%v\n kv:%v prevKey:%v ", e.Type, e.Kv, e.PrevKv)
}
}
以上所述就是小编给大家介绍的《golang对etcd的简单操作》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- JavaScript骚操作之操作符
- Go 语言操作 MySQL 之 事务操作
- C# 数据操作系列 - 1. SQL基础操作
- Vim 跨行操作与 Ex 命令操作范围
- 并发环境下,先操作数据库还是先操作缓存?
- 关于HBase Shell基本操作的表操作示例
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
数据库索引设计与优化
【美】Tapio Lahdenmaki、【美】Michael Leach / 曹怡倩、赵建伟 / 电子工业出版社 / 2015-6 / 79.00元
《数据库索引设计与优化》提供了一种简单、高效、通用的关系型数据库索引设计方法。作者通过系统的讲解及大量的案例清晰地阐释了关系型数据库的访问路径选择原理,以及表和索引的扫描方式,详尽地讲解了如何快速地估算SQL 运行的CPU 时间及执行时间,帮助读者从原理上理解SQL、表及索引结构、访问方式等对关系型数据库造成的影响,并能够运用量化的方法进行判断和优化,指导关系型数据库的索引设计。 《数据库索......一起来看看 《数据库索引设计与优化》 这本书的介绍吧!