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 ...