日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Go 学习笔记(59)— Go 第三方库之 etcd/clientv3 封装为方法使用(建立连接、设置key-value、获取key-value、获取带前缀的key-value)

發布時間:2023/11/28 生活经验 24 豆豆

1. 示例 1

package main
import ("context""fmt""go.etcd.io/etcd/clientv3""time"
)
// 寫入讀取
func SetGet() {// 配置 etcd ,創建客戶端cli, err := clientv3.New(clientv3.Config{Endpoints:   []string{"127.0.0.1:2379"},DialTimeout: 5 * time.Second,})if err != nil {fmt.Println("connect failed, err:", err)return}defer cli.Close()// 存儲ctx, cancel := context.WithTimeout(context.Background(), time.Second)_, err = cli.Put(ctx, "/sample_key/name/", "sample_value_name")defer cancel()if err != nil {fmt.Println("put name failed, err:", err)return}// 存儲ctx, cancel = context.WithTimeout(context.Background(), time.Second)_, err = cli.Put(ctx, "/sample_key/name/laixhe", "sample_value_name_laixhe")defer cancel()if err != nil {fmt.Println("put name failed, err:", err)return}// 存儲 - 租約時間del, _:= cli.Grant(context.TODO(), 10) // 申請租約,10s后就會自動移除ctx, cancel = context.WithTimeout(context.Background(), time.Second)_, err = cli.Put(ctx, "/sample_key/name/del", "sample_value_name_del", clientv3.WithLease(del.ID))defer cancel()if err != nil {fmt.Println("put name failed, err:", err)return}// 獲取ctx, cancel = context.WithTimeout(context.Background(), time.Second)resp, err := cli.Get(ctx, "/sample_key/name/")defer cancel()if err != nil {fmt.Println("get failed, err:", err)return}for _, ev := range resp.Kvs {fmt.Printf("get (/sample_key/name/) %s : %s\n", ev.Key, ev.Value)}// 獲取前綴的 /sample_key/name/ 都返回ctx, cancel = context.WithTimeout(context.Background(), time.Second)resp, err = cli.Get(ctx, "/sample_key/name/", clientv3.WithPrefix())defer cancel()if err != nil {fmt.Println("get failed, err:", err)return}for _, ev := range resp.Kvs {fmt.Printf("get all (/sample_key/name/) - %s : %s\n", ev.Key, ev.Value)}
}

2. 示例 2

package mainimport ("context""fmt""time""github.com/coreos/etcd/clientv3"
)type Etcd struct {client *clientv3.Clientkv     clientv3.KVlease  clientv3.Lease
}// 全局單例
var (G_etcd *Etcd
)// 初始化
func InitEtcd() (err error) {// 初始化配置config := clientv3.Config{Endpoints:   []string{"192.168.0.129:2379", "localhost:22379"}, // 集群地址DialTimeout: time.Duration(5) * time.Millisecond,               // 連接超時}// 建立連接client, err := clientv3.New(config)if err != nil {fmt.Println(err)}// 得到KV和Lease的API子集kv := clientv3.NewKV(client)lease := clientv3.NewLease(client)// 賦值單例G_etcd = &Etcd{client: client,kv:     kv,lease:  lease,}return
}func (etcd *Etcd) GetKeyValue(key string) error {getResp, err := etcd.kv.Get(context.TODO(), key, clientv3.WithPrefix())if err != nil {fmt.Println(err)}// 遍歷所有任務, 進行反序列化for _, kvPair := range getResp.Kvs {fmt.Println(kvPair)}return err
}func (etcd *Etcd) PutKeyValue(key, value string) error {// 保存到etcdputResp, err := etcd.kv.Put(context.TODO(), key, value, clientv3.WithPrevKV())if err != nil {fmt.Println(err)}// 如果是更新, 那么返回舊值if putResp.PrevKv != nil {fmt.Println(putResp.PrevKv.Value)}return err
}func (etcd *Etcd) DeleteKey(key string) error {// 從etcd中刪除它delResp, err := etcd.kv.Delete(context.TODO(), key, clientv3.WithPrevKV())if err != nil {fmt.Println(err)}// 返回被刪除的值if len(delResp.PrevKvs) != 0 {fmt.Println(delResp.PrevKvs[0].Value)}return err
}func (etcd *Etcd) PutKeyWithLease(key string, timeout int64) (err error) {leaseGrantResp, err := etcd.lease.Grant(context.TODO(), timeout)if err != nil {return}// 租約IDleaseId := leaseGrantResp.ID_, err = etcd.kv.Put(context.TODO(), key, "", clientv3.WithLease(leaseId))if err != nil {return}return
}func main() {InitEtcd()G_etcd.PutKeyValue("/demo/A/B", "hello world")G_etcd.GetKeyValue("/demo/A/B")G_etcd.DeleteKey("/demo/A/B")G_etcd.PutKeyWithLease("/demo/A/B", 100)
}

參考:
https://blog.csdn.net/c_circle/article/details/98473421
https://www.jianshu.com/p/3206e35677b4
https://www.cnblogs.com/sunlong88/p/11295424.html
https://segmentfault.com/a/1190000020868242?utm_source=tag-newest
https://gitbook.cn/books/5e7637996ba17a6d2c9a3352/index.html

總結

以上是生活随笔為你收集整理的Go 学习笔记(59)— Go 第三方库之 etcd/clientv3 封装为方法使用(建立连接、设置key-value、获取key-value、获取带前缀的key-value)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。