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使用说明的更多相关文章

  1. window下golang包管理glide使用说明

    golang是一门简洁高效的开发 语言,但是包管理一直是一个痛点,如图 : 很多开源项目特别是github.com中的大量应用golang.org和google.golang.org中的源码,且由于被 ...

  2. Golang、Php、Python、Java基于Thrift0.9.1实现跨语言调用

    目录: 一.什么是Thrift? 1) Thrift内部框架一瞥 2) 支持的数据传输格式.数据传输方式和服务模型 3) Thrift IDL 二.Thrift的官方网站在哪里? 三.在哪里下载?需要 ...

  3. 在C++中使用golang的协程

    开源项目cpp_features提供了一个仿golang协程的stackful协程库. 可以在c++中使用golang的协程,大概语法是这样的: #include <iostream> v ...

  4. Golang中解析json,构造json

    json解析是如今(网络)应用程序开发中最不可或缺的一环了.许多语言需要库支持才可以解析.构造json,但Golang凭借着原生库就可以很好地做到这一点. json的基本表现形式有两个:struct与 ...

  5. golang开发android环境搭建_window

    golang开发android环境搭建介绍 一 安装依赖软件: git:版本管理 go:  go开发环境(版本>=1.5),可直接下载window版的go安装包. android studio: ...

  6. Golang爬虫示例包系列教程(一):pedaily.com投资界爬虫

    Golang爬虫示例包 文件结构 自己用Golang原生包封装了一个爬虫库,源码见go get -u -v github.com/hunterhug/go_tool/spider ---- data ...

  7. calling c++ from golang with swig--windows dll(一)

    calling c++ from golang with swig--windows dll 之前项目组开发的项目核心代码全部使用C++语言,新项目可能会引入golang,花了一天多时间研究了wind ...

  8. Golang的CSP很酷?其实.NET也可以轻松完成

    说起Golang(后面统称为Go),就想到他的高并发特性,在深入一些就是 Goroutine.在大家被它优雅的语法和简洁的代码实现的高并发程序所折服时,其实C#/.NET也可以很容易的做到.今天我们来 ...

  9. golang实现文字云算法

    golang实现文字云算法 项目链接 https://github.com/bangbaoshi/wordcloud 效果图 测试步骤如下 git clone https://github.com/b ...

随机推荐

  1. kebab HDU - 2883(按时间段建点)

    题意: 有n个人去撸串,每个人都能决定自己的串上有几块肉,每一块肉都要花费一个单位时间才熟,烤炉一次能烤m块肉 给出每个人的起始时间.终止时间.要几串.每个串上有几块肉,问能否满足所有的人 (啥?题不 ...

  2. AtCoder Regular Contest 102 E Stop. Otherwise...

    题目链接:atcoder 大意:有\(n\)个骰子,每个骰子上面有\(k\)个数,分别是\(1\text ~ k\),现在求\(\forall i\in[2...2k]\),求出有多少种骰子点数的组合 ...

  3. bzoj 1854: [Scoi2010]游戏 (并查集||二分图最大匹配)

    链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1854 写法1: 二分图最大匹配 思路:  将武器的属性对武器编号建边,因为只有10000种 ...

  4. 前后端分离之vue2.0+webpack2 实战项目 -- html模板拼接

    对于前后端分离,如何把一个页面的公共部分比如head, header, footer, content等组合成一个完整的html 是一个值得考虑的地方. 对于php,我们可以利用include加载其他 ...

  5. 自定义Qt构建步骤,添加数据文件(txt,json等)到构建目录

    Qt的qrc资源文件是只读的,因此我们如果要用txt之类的文件存储数据,在程序运行过程中就不能对它们进行修改,也就是不能进行读操作.用"file.open(QIODevice::WriteO ...

  6. Configure an PPTP Server on Debian

    安装PPTP apt-get update apt-get upgrade apt-get install iptables pptpd vim 设置并修改配置文件vim /etc/pptpd.con ...

  7. 自学Linux命令行与Shell脚本之路

    自学Linux命令行与Shell脚本之路[第一回]:初识Linux   1.1 自学Linux Shell1.1-Linux初识 1.2 自学Linux Shell1.2-Linux目录结构 1.3  ...

  8. emwin之2D图形流位图显示的方法

    @2018-10-31 [需求] 界面上绘制状态指示图标 [方法] --① 方法一 外部存储介质上的图标读写与显示 i  . 将要显示的图标使用官方软件<BmpCvt.exe>转换成 &q ...

  9. centos7添加并挂载新硬盘

    环境目标: 配置一台centos7,主硬盘40G装系统:副硬盘200G作为数据盘(格式:XFS)挂载到根目录:/data/ 说明:XFS是高性能文件系统,SGI为他们的 IRIX平台而设计: 自从20 ...

  10. Centos 7下下载和安装docker

    sudo yum install -y device-mapper sudo modprobe dm_mod ls -l /sys/class/misc/device-mapper sudo rpm ...