我是靠谱客的博主 喜悦鱼,最近开发中收集的这篇文章主要介绍etcdv3实战·PrevKV说明及相关操作前言与背景Op定义及具体值获取 取PrevKvs、PrevKv注意事项,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

前言与背景

Op定义及具体值获取

取PrevKvs、PrevKv注意事项


前言与背景

基于前文的封装,这里我们说明下PrevKV相关的定义及操作。
为了应对这样的需求:插入(更新)、删除某KV时,我们希望获得该key的上一个KV值,这时候就会用到该操作。

Op定义及具体值获取

要取得操作前的上一个Key和value的值,则需要在操作时带上必要的op(即...clientv3.OpOption):

...
kv := clientv3.NewKV(cli)
resp, err = kv.Delete(ctx, key, clientv3.WithPrevKV())

以上代码表示,在删除key时,通过clientv3.WithPrevKV()标记返回的结果中需要返回删除前的KV值(PUT操作意思一样);


源码中还提供了很多With功能,可根据实际需要来选择:

实际上就是给type Op struct这个结构的一些字段赋值进行标记。
位于go.etcd.ioetcd@v0.5.0-alpha.5.0.20200910180754-dd1b699fc489clientv3op.go

那么如何取得删除前的KV值呢?

来看看源码中对响应的定义:

type DeleteRangeResponse struct {
    Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"`
    // deleted is the number of keys deleted by the delete range request.
    Deleted int64 `protobuf:"varint,2,opt,name=deleted,proto3" json:"deleted,omitempty"`
    // if prev_kv is set in the request, the previous key-value pairs will be returned.
    PrevKvs []*mvccpb.KeyValue `protobuf:"bytes,3,rep,name=prev_kvs,json=prevKvs" json:"prev_kvs,omitempty"`
}

因为删除有可能删的是指定key开头的系列KV,因此可以看到返回值中是PrevKvs而不是PrevKv,取值即resp.PrevKvs即可。

PUT操作为:

type PutResponse struct {
    Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"`
    // if prev_kv is set in the request, the previous key-value pair will be returned.
    PrevKv *mvccpb.KeyValue `protobuf:"bytes,2,opt,name=prev_kv,json=prevKv" json:"prev_kv,omitempty"`
}

具体值PrevKv获取

resp.PrevKv.Key
resp.PrevKv.Value

默认是[]byte类型,如有需要可转为string.


取PrevKvs、PrevKv注意事项

获取删除前的PrevKvs 或者 PUT前的PrevKv看起来很方便,但也是有一定条件的,经过调查所得如下:

1,对于PUT操作,put过该key后再次put,相当于更新操作,此时PrevKv有值;对,key首次PUT时 PrevKv为空;


2,对于DELETE操作,该key存在时进行delete操作,此时PrevKvs有值,若去delete不存在的key,则返回的PrevKvs为空;

这里的空就是nil

最后

以上就是喜悦鱼为你收集整理的etcdv3实战·PrevKV说明及相关操作前言与背景Op定义及具体值获取 取PrevKvs、PrevKv注意事项的全部内容,希望文章能够帮你解决etcdv3实战·PrevKV说明及相关操作前言与背景Op定义及具体值获取 取PrevKvs、PrevKv注意事项所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部