etcd
使用 Txn
提供简单的事务处理,使用这个特性,可以一次性插入多条语句,测试代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package main
import (
"context"
"fmt"
"go.etcd.io/etcd/clientv3"
"log"
)
func main() {
endpoints := []string{"127.0.0.1:10001", "127.0.0.1:10002", "127.0.0.1:10003"}
cli, err := clientv3.New(clientv3.Config{Endpoints: endpoints})
if err != nil {
log.Fatal(err)
}
defer cli.Close()
_, err = cli.Txn(context.TODO()).If().Then(
clientv3.OpPut("k30", "v30"),
clientv3.OpPut("k40", "v40"),
).Commit()
if err != nil {
log.Fatal(err)
}
resp, err := cli.Txn(context.TODO()).If().Then(
clientv3.OpGet("k30"),
clientv3.OpGet("k40"),
).Commit()
if err != nil {
log.Fatal(err)
}
for _, rp := range resp.Responses {
for _, ev := range rp.GetResponseRange().Kvs {
fmt.Printf("%s -> %s, create revision = %d\n",
string(ev.Key),
string(ev.Value),
ev.CreateRevision)
}
}
}
程序输出代码如下:
k30 -> v30, create revision = 13
k40 -> v40, create revision = 13
k30
和k40
的 create revision
都是 13
,表明这两个语句是一次性插入的