閒談etcd(三)etcd的使用

2021-10-07 09:21:53 字數 2921 閱讀 1195

type client struct
import (

"fmt"

"go.etcd.io/etcd/clientv3"

"time"

)//連線

func main() ,

dialtimeout: 5 * time.second,

} //建立連線

if client, err := clientv3.new(config); err != nil

fmt.println("connect success")

defer client.close()

}

dialtimeout:建立client的首次連線超時,這裡傳了5秒,如果5秒都沒有連線成功就會返回err。一旦client建立成功,我們就不用再關心後續底層連線的狀態了,client內部會重連。

//控制超時

ctx, cancel := context.withtimeout(context.background(), time.second)

//增-存值

_, err = client.put(ctx, "/demo/demo1_key", "demo1_value")

//操作完畢,cancel掉

cancel()

if err != nil

put(ctx context.context, key, val string, opts ...opoption) (*putresponse, error)
ctx, cancel = context.withtimeout(context.background(), time.second)

resp, err := client.get(ctx, "/demo/demo1_key")

// get查詢還可以增加withprefix選項,獲取某個目錄下的所有子元素

//eg: resp, err := client.get(ctx, "/demo/", clientv3.withprefix())

cancel()

if err != nil

for _, item := range resp.kvs

ctx, _ = context.withtimeout(context.background(), time.second)

resp, err := client.delete(ctx, "/demo/demo1_key")

if err != nil

fmt.println(resp.prevkvs)

watch 方法返回乙個watchchan 類似的變數, watchchan是乙個channel

import (

"context"

"fmt"

"go.etcd.io/etcd/clientv3"

"time"

)func main() ,

dialtimeout: time.second,

}) if err != nil

defer client.close()

client.put(context.background(), "/demo/demo2_key", "demo2_value")

go func()

} }if resp, err := client.put(context.todo(), "/demo/demo2_key/", "demo2_watch"); err != nil else

}

import (

"context"

"fmt"

"go.etcd.io/etcd/clientv3"

"log"

"sync"

"time"

)func main() )

if err != nil

client.close()

var w sync.waitgroup

w.add(10)

key10 := "setnx"

for i := 0; i < 10; i++

w.done()

}(i)

} w.wait()

if resp, err := client.get(context.todo(), key10); err != nil else

}

import (

"time"

)var (

dialtimeout = 2 * time.second

requesttimeout = 10 * time.second

)func main() ,

}) if err != nil

kv := clientv3.newkv(client)

lease, err := client.grant(ctx, 3)

if err != nil

//insert key with a lease of 3 second ttl

kv.put(ctx, "/demo/demo1_key", "demo1_value", clientv3.withlease(lease.id))

gr, _ = kv.get(ctx, "/demo/demo1_key")

if len(gr.kvs) == 1

//let the ttl expire

time.sleep(3 * time.second)

gr, _ = kv.get(ctx, "/demo/demo1_key")

if len(gr.kvs) == 0

}

etcd 啟動分析 Etcd的基本使用

etcd 是 coreos 團隊於 2013 年 6 月發起的開源專案,它的目標是構建乙個高可用的分布式鍵值 key value 資料庫,基於 go 語言實現,內部採用 raft 協議作為一致性演算法。etcd目前預設使用 2379 埠提供 http api 服務。安裝進入官網 進入目錄啟動etcd...

Etcd的基本使用

etcd 是 coreos 團隊於 2013 年 6 月發起的開源專案,它的目標是構建乙個高可用的分布式鍵值 key value 資料庫,基於 go 語言實現,內部採用 raft 協議作為一致性演算法。etcd目前預設使用 2379 埠提供 http api 服務。進入官網 cd etcd v3.3...

etcd搭建及使用

etcd搭建version 3.5 usr local bin etcd 啟動命令 data dir etcd data 指定節點的資料儲存目錄,這些資料報括節點id,集群id,集群初始化配置 name etcd 節點名稱 initial advertise peer urls http 2380 ...