ETCD3 和 ETCD2 性能比较

ServerETCD2ETCD3
ETCD21.698331852s = 1698.331852mserror
ETCD320.87944695s = 20879.44695ms156.3686ms


注:插入数据量为2000条。etcd3的TXN每次最多可批量操作128条,所以,在etcd3中会每128条进行一次txn处理,最后不足128的为一次。租约支持每个key一个租约,测试2000条数据时支持。

结论
  • 在etcd.client2版本中,因为是每一个key都进行一次etcd的set操作,这个操作是加锁的,所以,在一边遍历一边set的情况下会耗时很多在锁上面。

  • 在etcd.client3版本中,是把所有的conf分类后,每128个操作进行一次事务性执行,所以,性能增长很明显。

ETCD3 基本命令用法:

查看版本:

./etcdctl version

GET:

获取某个KV

./etcdctl get key

获取所有的KV

./etcdctl get --from-key ''

获取一定范围内的KV

./etcdctl get key1 keyn

PUT:

写入KV

./etcdctl put key value

DEL:

删除一个KV

./etcdctl del key

删除一定范围内的KV

./etcdctl del key1 keyn

WATCH:

watch某个Key:

./etcdctl watch key

watch一定范围内的Key

./etcdctl watch key1 keyn

watch以某字符串为首的所有Key

./etcdctl watch --prefix=true string

LEASE:

创建一定时间的租约,单位为s

./etcdctl lease grant n

为某个KV授予租约

./etcdctl put --lease=name key value

查看租约信息

./etcdctl lease timetolive name

保持租约

./etcdctl lease keep-alive name

撤销租约,租约撤销的同时,被授予租约的KV会被删除

./etcdctl lease revoke name

ETCD3 go-clientv3 使用示例

func main() {
    cli, err := clientv3.New(clientv3.Config{
        Endpoints:   endpoints,
        DialTimeout: dialTimeout,
    })
    if err != nil {
        println(err)
    }
    defer cli.Close()

    //PUT值
    if _, err := cli.Put(context.TODO(), "foo", "bar"); err != nil{
        fmt.Println(err.Error())
    }

    //GET值
    if resp, err := cli.Get(context.TODO(), "foo"); err != nil {
        fmt.Println(err.Error())
    } else {
        fmt.Println("resp: ", resp)
    }

    //TXN
    ctx, cancel := context.WithTimeout(context.Background(), requestTimeout)
    _, err = cli.Txn(ctx).
        If(clientv3.Compare(clientv3.Value("key"), ">", "abc")).
        Then(clientv3.OpPut("key", "XYZ")).
        Else(clientv3.OpPut("key", "ABC")).
        Commit()
    cancel()
    if err != nil {
        fmt.Println(err)
    }

    //Watch
    rch := cli.Watch(context.Background(), "", clientv3.WithPrefix())
    for wresp := range rch {
        for _, ev := range wresp.Events {
            fmt.Printf("%s %q : %q\n", ev.Type, ev.Kv.Key, ev.Kv.Value)
        }
    }

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值