golang etcdclientv3使用说明
clientv3.New() 创建连接
config = ec.Config{
Endpoints: []string{"10.0.0.5:2379"}, //连接的etcd集群地址,这里为单机的故一个地址
DialTimeout: 30 * time.Second, //超时时长
}
返回值为clientv3.Client结构体
KV是经常使用的类型,主要用来操作key value值
client.Put() 实际上就是KV接口实现的一个方法
KV.Put 向etcd中插入一个Key,如存在则替换新的值。
if putRes, err = kv.Put(context.TODO(), "/cron/jobs/job3", "test111111 hel3123lo",ec.WithPrevKV()); err != nil {
fmt.Println(err)
} else {
fmt.Println("revision: ", putRes.Header.Revision)
if putRes.PrevKv != nil{
fmt.Println(string(putRes.PrevKv.Value))
}
}
WithPrevKV()获取Put事件操作之前的键值对
package main import (
"context"
"fmt"
"time" ec "go.etcd.io/etcd/clientv3"
) func main() {
var (
config ec.Config
client *ec.Client
err error
kv ec.KV
putRes *ec.PutResponse
) config = ec.Config{
Endpoints: []string{"10.0.0.5:2379"},
DialTimeout: 30 * time.Second,
} if client, err = ec.New(config); err != nil {
fmt.Println(err)
return
} kv = ec.NewKV(client) if putRes, err = kv.Put(context.TODO(), "/cron/jobs/job3", "test111111 hel3123lo",ec.WithPrevKV()); err != nil {
fmt.Println(err)
} else {
fmt.Println("revision: ", putRes.Header.Revision)
if putRes.PrevKv != nil{
fmt.Println(string(putRes.PrevKv.Value))
}
} op:= ec.OpGet("/cron/jobs/job3")
fmt.Println(string(op.KeyBytes()))
}
如果Key不存在,则没有事件操作之前的信息
[root@node01 ~]# ETCDCTL_API=3 etcdctl get /cron/jobs/ --prefix
/cron/jobs/job1
test hello
/cron/jobs/job2
test111111 hel3123lo
/cron/jobs/job3
test22222 hello2222
/cron/jobs/job4
test22222 hello2222
获取key的值
package main import (
"context"
"fmt"
ec "go.etcd.io/etcd/clientv3"
"time"
) var(
conf ec.Config
cli *ec.Client
err error
kv ec.KV
getResp *ec.GetResponse
) func main(){
conf = ec.Config{
Endpoints:[]string{"10.0.0.5:2379"},
DialTimeout:time.Second*30,
} if cli,err = ec.New(conf); err != nil{
fmt.Println(err)
}
kv = ec.NewKV(cli) getResp,err = kv.Get(context.TODO(),"/cron/jobs/job3") fmt.Println(getResp.Kvs)
}
运行结果
[key:"/cron/jobs/job3" create_revision:11 mod_revision:14 version:4 value:"test22222 hello2222" ] Process finished with exit code 0
create_revision: 为创建时的版本
mod_revision:修改版本
version:自从创建以来修改的次数。 值会不断的递增。
删除key
delResp, err = kv.Delete(context.TODO(), "/cron/jobs/job4", ec.WithPrevKV()); if len(delResp.PrevKvs) != 0 {
fmt.Println(delResp)
}
删除前的多个key
一次性删除多个key
kv.Delete(context.TODO(), "/cron/jobs/", ec.WithPrefix())
WithPrefix():以这个key为前缀的key都删除掉
golang etcdclientv3使用说明的更多相关文章
- window下golang包管理glide使用说明
golang是一门简洁高效的开发 语言,但是包管理一直是一个痛点,如图 : 很多开源项目特别是github.com中的大量应用golang.org和google.golang.org中的源码,且由于被 ...
- Golang、Php、Python、Java基于Thrift0.9.1实现跨语言调用
目录: 一.什么是Thrift? 1) Thrift内部框架一瞥 2) 支持的数据传输格式.数据传输方式和服务模型 3) Thrift IDL 二.Thrift的官方网站在哪里? 三.在哪里下载?需要 ...
- 在C++中使用golang的协程
开源项目cpp_features提供了一个仿golang协程的stackful协程库. 可以在c++中使用golang的协程,大概语法是这样的: #include <iostream> v ...
- Golang中解析json,构造json
json解析是如今(网络)应用程序开发中最不可或缺的一环了.许多语言需要库支持才可以解析.构造json,但Golang凭借着原生库就可以很好地做到这一点. json的基本表现形式有两个:struct与 ...
- golang开发android环境搭建_window
golang开发android环境搭建介绍 一 安装依赖软件: git:版本管理 go: go开发环境(版本>=1.5),可直接下载window版的go安装包. android studio: ...
- Golang爬虫示例包系列教程(一):pedaily.com投资界爬虫
Golang爬虫示例包 文件结构 自己用Golang原生包封装了一个爬虫库,源码见go get -u -v github.com/hunterhug/go_tool/spider ---- data ...
- calling c++ from golang with swig--windows dll(一)
calling c++ from golang with swig--windows dll 之前项目组开发的项目核心代码全部使用C++语言,新项目可能会引入golang,花了一天多时间研究了wind ...
- Golang的CSP很酷?其实.NET也可以轻松完成
说起Golang(后面统称为Go),就想到他的高并发特性,在深入一些就是 Goroutine.在大家被它优雅的语法和简洁的代码实现的高并发程序所折服时,其实C#/.NET也可以很容易的做到.今天我们来 ...
- golang实现文字云算法
golang实现文字云算法 项目链接 https://github.com/bangbaoshi/wordcloud 效果图 测试步骤如下 git clone https://github.com/b ...
随机推荐
- maven手动安装jar包到本地仓库,以ojdbc6为例
在做mybatis generator的中文注释实现时,感觉每次都要在配置文件中指定ojdbc6的位置太麻烦了,别人用也不方便,没有的还得自己去下,所以就想直接把ojdbc6打包到项目里,这样拿到就可 ...
- 【BZOJ3174】[TJOI2013]拯救小矮人(贪心,动态规划)
[BZOJ3174][TJOI2013]拯救小矮人(贪心,动态规划) 题面 BZOJ 洛谷 题解 我们定义一个小矮人的\(A_i+B_i\)为它的逃跑能力. 我们发现,如果有两个小矮人\(x,y\), ...
- TypeError: __init__() got an unexpected keyword argument 't_command'
python .\manage.py migrate 报错如下 λ python .\manage.py migrateTraceback (most recent call last): File ...
- MVC接收列表参数
ASP.NET MVC 表单参数如果有列表时要怎么写呢. 虽然很久不用MVC了,但几乎每次遇到一次就要研究一下.然后又忘了. 其实也明白这是未完全弄清楚表单参数的传递形式,如果明白了,就知道MVC为 ...
- Kafka学习之路
一直在思考写一些什么东西作为2017年开篇博客.突然看到一篇<Kafka学习之路>的博文,觉得十分应景,于是决定搬来这“他山之石”.虽然对于Kafka博客我一向坚持原创,不过这篇来自Con ...
- WinterAndSnowmen
https://vjudge.net/problem/TopCoder-12891 暴力想法是:dp[i][s1][s2]前i个,第一个集合xor是s1,第二个集合xor是s2方案数O(n^3) 有x ...
- wave
题意:求有多少个1~n的排列满足: 其中n<=50 解: 贼神的一道题. 如何处理绝对值? 从小到大按顺序放数,可以拆掉绝对值. 如果你放的旁边有个空隙,那么贡献-i,如果旁边有个数,贡献+i ...
- 2018最完整ITTO分节整理指导(PMP项目管理入门必备)
2018年项目管理基础教材<PMBOK>指南进行了改版,之前的一些PMP资料没有太大帮助,反而会让大家记忆混淆,用最新的会好一些,今天小编就把搜集到的2018年项目管理最详细的ITTO的P ...
- 关于Jedis是否线程安全的测试
转: 关于Jedis是否线程安全的测试 2018年09月20日 15:53:51 cwz_茶仔 阅读数:659 版权声明:转载请注明出处 https://blog.csdn.net/jk94043 ...
- session会话对象
一.session会话对象介绍: 会话对象让你能够跨请求保持某些参数,它也会在同一个session实例发出的所有请求之间保持cookie. 二.步骤 1.对session对象进行一次实例化 2.进行登 ...