Posts 使用 Txn 一次性插入多个语句
Post
Cancel

使用 Txn 一次性插入多个语句

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

k30k40create revision 都是 13,表明这两个语句是一次性插入的

This post is licensed under CC BY 4.0 by the author.