etcd安装与操作

166 阅读1分钟

etcd安装与操作

系统:mac

etcd安装

$ brew install etcd

etcd启动

etcd

命令行中操作etcd

put

$ etcdctl put greeting "Hello, etcd"
OK

get

$ etcdctl get greeting
greeting
Hello, etcd

go代码操作etcd

pkg.go.dev/go.etcd.io/…

安装etcd client

$ go get go.etcd.io/etcd/client/v3

连接, put, get, watch

package main

import (
	"context"
	"fmt"
	"time"

	clientv3 "go.etcd.io/etcd/client/v3"
)

// etcd client put/get demo
// use etcd/client/v3

func main() {
	//create client
	cli, err := clientv3.New(clientv3.Config{
		Endpoints:   []string{"localhost:2379"},
		DialTimeout: 5 * time.Second,
	})
	if err != nil {
		// handle error!
		fmt.Printf("connect to etcd failed, err:%v\n", err)
		return
	}
	fmt.Println("connect to etcd success")
	defer cli.Close()

	// put
	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
	_, err = cli.Put(ctx, "sample_key", "sample_value")
	cancel()
	if err != nil {
		fmt.Printf("put to etcd failed, err:%v\n", err)
		return
	}

	// get
	ctx, cancel = context.WithTimeout(context.Background(), time.Second)
	resp, err := cli.Get(ctx, "sample_key")
	cancel()
	if err != nil {
		fmt.Printf("get from etcd failed, err:%v\n", err)
		return
	}
	for _, ev := range resp.Kvs {
		fmt.Printf("%s:%s\n", ev.Key, ev.Value)
	}
        
        //watch key:"sample_key" change
	var rch clientv3.WatchChan = cli.Watch(context.Background(), "sample_key")
	for wresp := range rch {
		for _, ev := range wresp.Events {
			fmt.Printf("Type: %s Key:%s Value:%s\n", ev.Type, ev.Kv.Key, ev.Kv.Value)
		}
	}
}