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. 以计算斐波那契数列为例说说动态规划算法(Dynamic Programming Algorithm Overlapping subproblems Optimal substructure Memoization Tabulation)

    动态规划(Dynamic Programming)是求解决策过程(decision process)最优化的数学方法.它的名字和动态没有关系,是Richard Bellman为了唬人而取的. 动态规划 ...

  2. 对strom的理解

    1.什么是strom: storm是一个分布式实时计算系统,用户只需要提供自己的插件(例如一个jar包,其中编写用户自己的逻辑代码),然后将它部署到storm服务器上,storm的master服务器就 ...

  3. Sudoku POJ - 3076

    Sudoku Time Limit: 10000MS   Memory Limit: 65536K Total Submissions: 5769   Accepted: 2684 Descripti ...

  4. eclipse中git推送上传错误 没有足够的数据写入

    Can't connect to any repository: https://github.com/jiashubing/test.git (https://github.com/jiashubi ...

  5. Qt Creator 搭配Git 版本控制

    再次介绍一下Git的使用,这次是在Coding.net上部署项目的.这个是写给大作业合作的小伙伴们(我和我的A奶朋友们和某A的男朋友)看的. 安装Git 首先安装Git(msysGit) 下载地址 h ...

  6. Codeforces | CF1033D 【Divisors】

    题目大意:给定\(n(1\leq n\leq500)\)个数\(a_1,a_2\cdots,a_n(1\leq a_i\leq2\cdot10^{18})\),每个数有\(3\sim5\)个因数,求\ ...

  7. 逆元(inv)

    当求解公式:(a/b)%m 时,因b可能会过大,会出现爆精度的情况,所以需变除法为乘法: 设c是b的逆元,则有b*c≡1(mod m): 则(a/b)%m = (a/b)*1%m = (a/b)*b* ...

  8. 20165223 《JAVA程序设计》第六周学习总结

    教材学习内容总结 第八章-常用实用类-要点 基础:String类 重点:StringTokenizer类,Scanner类 难点:Class类与Console类,Pattern类与Match类 其他特 ...

  9. MySQL 到底能不能放到 Docker 里跑?

    https://weibo.com/ttarticle/p/show?id=2309404296528549285581 前言 前几月经常看到有 MySQL 到底能不能放到 Docker 里跑的各种讨 ...

  10. 只用200行Go代码写一个自己的区块链!

    Coral Health · 大约23小时之前 · 220 次点击 · 预计阅读时间 7 分钟 · 不到1分钟之前 开始浏览 区块链是目前最热门的话题,广大读者都听说过比特币,或许还有智能合约,相信大 ...