package db import ( "context" "errors" "go.etcd.io/etcd/clientv3" "locking-kit-server/consts" "log" "time" ) /** * @author yuanrh * @description etcd数据库客户端 * @date 2021/6/28 11:11 **/ /** 获取客户端连接 */ func GetClient() (*clientv3.Client,error){ cli, err := clientv3.New(clientv3.Config{ Endpoints: []string{consts.ETCD_URL}, DialTimeout: 5 * time.Second, }) if err != nil { // handle error! log.Printf("connect to etcd failed, err:%v\n", err) return nil,err } //log.Println("connect to etcd success") return cli,nil } /** 删除包含该前缀的所有Key */ func DeleteWithPrefix(prefix string) error{ if len(prefix)==0{ return errors.New("参数prefix不能为空") } client,err := GetClient() if err!=nil{ return err } defer client.Close() _, err = client.KV.Delete(context.Background(),prefix, clientv3.WithPrefix()) if err!=nil{ log.Println(err) return err } return err } /** 批量增加 */ func BatchAdd(dataMap map[string] string) error{ if dataMap==nil || len(dataMap)==0{ return errors.New("dataMap为空") } client,err := GetClient() if err!=nil{ return err } defer client.Close() for k, v := range dataMap { _, err = client.KV.Put(context.Background(), k, v) if err!=nil{ log.Println(err) return err } } return nil } /** 替换k,v */ func ReplaceInto(k, v string) error{ client,err := GetClient() if err!=nil{ return err } defer client.Close() _,err =client.KV.Put(context.Background(), k, v) if err!=nil{ log.Println(err) return err } return nil } /** 根据后缀查询 */ func QueryWithPrefix(prefix string) (map[string] string,error){ client,err := GetClient() if err!=nil{ log.Println(err) return nil,err } defer client.Close() resp,err :=client.KV.Get(context.Background(),prefix, clientv3.WithPrefix()) if err!=nil{ log.Println(err) return nil,err } var gobalFileMap = make(map[string] string) for _,v := range resp.Kvs{ gobalFileMap[string(v.Key)]=string(v.Value) } return gobalFileMap,nil; }