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. django 配置邮件发送 send_email

    导入 send_email 所用方法导入 from django.core.mail import send_mail 因为使用的需要指明 发送人 所以要把 setting.py 中的 EMAIL_F ...

  2. CS Academy Sliding Product Sum(组合数)

    题意 有一个长为 \(N\) 的序列 \(A = [1, 2, 3, \dots, N]\) ,求所有长度 \(\le K\) 的子串权值积的和,对于 \(M\) 取模. \(N \le 10^{18 ...

  3. WC2019 划水记

    写在前面: 本篇是擅长咕咕咕的\(\text{BLUESKY007}\)同学难得不咕写的游记,将会记录\(WC2019(2019.1.24(Day\ 0)\sim2019.1.30(Day\ 6))\ ...

  4. hdu2586How far away ?(LCA LCATarjan离线)

    题目链接:acm.hdu.edu.cn/showproblem.php?pid=2586 题目大意:有n个点,同n-1条带有权值的双向边相连,有m个询问,每个询问包含两个数x,y,求x与y的最短距离. ...

  5. Python3 与 C# 扩展之~基础衍生

      本文适应人群:C# or Python3 基础巩固 代码裤子: https://github.com/lotapp/BaseCode 在线编程: https://mybinder.org/v2/g ...

  6. 从Java的角度修复CSRF漏洞

    漏洞挖掘中,说实话挖过最多的漏洞就属CSRF漏洞了,提交CSRF漏洞很多次,绕过CSRF防御进行攻击也有很多次.CSRF漏洞是一个很容易引发的问题,今天我从Java的角度来说下这个安全漏洞的修复方案. ...

  7. css 圆形头像

    方法一:背景图片(推荐) 好处是,图片长宽不等的情况下图片不会变形 .ui-photo { width: 100px; height: 100px; background: url("img ...

  8. 洛谷P1196 银河英雄传说

    大意:你有30000个队列,第i个队列中只有i 有T个操作,1,把某个队列头接到另一个队列尾. 2,问两个元素之间的距离. 本题主要有三种解法. ①带权并查集. 具体来说就是,并查集维护当前集合的大小 ...

  9. 【洛谷P2860】冗余路径

    题目大意:给定一个 N 个点,M 条边组成的无向图,求至少在图中加入几条边才能使得整个图没有割边. 题解:求出该无向图的所有边双联通分量,每个边双联通分量可以理解成无向图的一个极大环,对该无向图进行缩 ...

  10. Day032--Python--操作系统, process进程

    多道技术背景: 提高工作效率(充分利用I/O阻塞的时间)    (I: input, O: output) 同时执行多个任务 多道技术: 空间复用: 充分利用内存空间 时间复用: 充分利用I/O阻塞时 ...