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
安装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)
}
}
}