玩一玩 golang 之 etcd 基础操作

etcd的安装

下载源码, 编译运行

git clone https://github.com/coreos/etcd.git
$ cd etcd
$ ./build
$ ./bin/etcd
测试etcd

设置值

$ ETCDCTL_API=3 ./bin/etcdctl put foo bar
OK

获取值


$ ETCDCTL_API=3 ./bin/etcdctl get foo
foo
bar

下载go第三方库
go get github.com/coreos/etcd/clientv3

设置值与获取值

package main

import (
    "context"
    "fmt"
    "github.com/coreos/etcd/clientv3"
    "time"
)

func main() {

    cli, err := clientv3.New(clientv3.Config{
        Endpoints:   []string{"localhost:2379", "localhost:22379", "localhost:32379"},
        DialTimeout: 5 * time.Second,
    })
    if err != nil {
        fmt.Println("connect failed, err:", err)
        return
    }

    fmt.Println("connect succ")
    defer cli.Close()
    ctx, cancel := context.WithTimeout(context.Background(), time.Second)
    _, err = cli.Put(ctx, "/logagent/conf/", "sample_value")
    cancel()
    if err != nil {
        fmt.Println("put failed, err:", err)
        return
    }
    ctx, cancel = context.WithTimeout(context.Background(), time.Second)
    resp, err := cli.Get(ctx, "/logagent/conf/")
    cancel()
    if err != nil {
        fmt.Println("get failed, err:", err)
        return
    }
    for _, ev := range resp.Kvs {
        fmt.Printf("%s : %s\n", ev.Key, ev.Value)
    }
}

watch操作

package main

import (
    etcd_client "github.com/coreos/etcd/clientv3"
    "time"
    "fmt"
    "context"
)

func main() {
    client, err := etcd_client.New(etcd_client.Config{
        Endpoints:   []string{"localhost:2379", "localhost:22379", "localhost:32379"},
        DialTimeout: 5 * time.Second,
    })
    if err != nil {
        fmt.Printf("connect failed ,err ", err)
        return
    }

    defer client.Close()

    background := context.Background()
    client.Put(background, "/logagent/conf/", "123456")
    if err != nil {
        fmt.Println("err :", err)
        return
    }

    fmt.Println("connec success !!")
    for {
        watch := client.Watch(context.Background(), "/logagent/conf/")
        for wresp := range watch {
            for _, v := range wresp.Events {
                fmt.Printf("%s %q : %q \n", v.Type,v.Kv.Key,v.Kv.Value)
            }
        }
    }
}
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值