网站怎么增加代码,设计上海2021门票,抖抈app软件下载,网站绝对路径301这里将使用etcdctl命令行工具来进行演示#xff0c;
1、使用put命令向etcd写入kv对
使用etcdctl put命令来设置键值对。put命令接受两个参数#xff1a;键和值
使用方法#xff1a;
NAME:put - Puts the given key into the storeUSAGE:etcdctl put [options] key
1、使用put命令向etcd写入kv对
使用etcdctl put命令来设置键值对。put命令接受两个参数键和值
使用方法
NAME:put - Puts the given key into the storeUSAGE:etcdctl put [options] key value (value can also be given from stdin) [flags]DESCRIPTION:Puts the given key into the store.When value begins with -, value is interpreted as a flag.Insert -- for workaround:$ put key -- value$ put -- key valueIf value isnt given as a command line argument and --ignore-value is not specified,this command tries to read the value from standard input.If lease isnt given as a command line argument and --ignore-lease is not specified,this command tries to read the value from standard input.For example,$ cat file | put keywill store the content of the file to key.OPTIONS:-h, --help[false] help for put--ignore-lease[false] updates the key using its current lease--ignore-value[false] updates the key using its current value--lease0 lease ID (in hexadecimal) to attach to the key--prev-kv[false] return the previous key-value pair before modification
示例
# 写入一个键为foo 值为 hello world数据
[rootlocalhost etcd]# ./etcdctl put foo hello world
OK
# 使用put命令需要注意的事项为当需要插入以“-”开通的值时将被解释为一个标志需要先插入--标志来解决该问题
[rootlocalhost etcd]# ./etcdctl put key3 -- -pzh
OK
[rootlocalhost etcd]# ./etcdctl get key3
key3
-pzh2、使用get命令从etcd中读取kv对
使用get 命令来获取键对应的值put命令接受一个参数键
使用方法
[rootlocalhost etcd]# ./etcdctl get --help
NAME:get - Gets the key or a range of keysUSAGE:etcdctl get [options] key [range_end] [flags]OPTIONS:--consistencyl Linearizable(l) or Serializable(s)--count-only[false] Get only the count--from-key[false] Get keys that are greater than or equal to the given key using byte compare-h, --help[false] help for get--keys-only[false] Get only the keys--limit0 Maximum number of results--order Order of results; ASCEND or DESCEND (ASCEND by default)--prefix[false] Get keys with matching prefix--print-value-only[false] Only write values when using the simple output format--rev0 Specify the kv revision--sort-by Sort target; CREATE, KEY, MODIFY, VALUE, or VERSION
示例
# 获取key为foo的值
[rootlocalhost etcd]# ./etcdctl get foo
foo
hello world
# 获取前缀为key的所有键
[rootlocalhost etcd]# ./etcdctl get key --prefix
key1
v9
key2
v13、使用del命令从etcd中删除KV对
# 删除键foo
[rootlocalhost etcd]# ./etcdctl del foo
# 先新增以前缀为key开头的五个键key1~key5
[rootlocalhost etcd]# ./etcdctl put key1 v1
OK
[rootlocalhost etcd]# ./etcdctl put key2 v2
OK
[rootlocalhost etcd]# ./etcdctl put key3 v3
OK
[rootlocalhost etcd]# ./etcdctl put key4 v4
OK
[rootlocalhost etcd]# ./etcdctl put key5 v5
OK
# 按前缀匹配的方式删除所有的key
[rootlocalhost etcd]# ./etcdctl del --prefix key
5
4、查看ctcd的数据版本
# 查看
[rootlocalhost etcd]# ./etcdctl get foo -w fields
# 发送响应的集群id
ClusterID : 14841639068965178418
# 响应请求的节点ID
MemberID : 10276657743932975437
# 创建key时集群中当前全局数据版本号
Revision : 53
# 请求时当前raft主节点的任期号
RaftTerm : 10
# 查看的键
Key : foo
# 当前key创建时候的全局版本号值
CreateRevision : 32
# 当前key修改时候的全局版本号值
ModRevision : 32
# key的数据版本号
Version : 1
# key当前对应的值
Value : v1
# 使用的租约对应的id,如果没有使用则该值为0
Lease : 0
More : false
Count : 15、监控key
使用方法
# watch的用法参考如下
[rootlocalhost etcd]# ./etcdctl watch --help
NAME:watch - Watches events stream on keys or prefixesUSAGE:etcdctl watch [options] [key or prefix] [range_end] [--] [exec-command arg1 arg2 ...] [flags]OPTIONS:-h, --help[false] help for watch-i, --interactive[false] Interactive mode--prefix[false] Watch on a prefix if prefix is set--prev-kv[false] get the previous key-value pair before the event happens--rev0 Revision to start watching监控单个key
# 在第一个客户端输入如下指令
[rootlocalhost etcd]# ./etcdctl watch foo
PUT
foo
v2
PUT
foo
v3
PUT
foo
v3
# 在第二客户端输入监控命令
[rootlocalhost etcd]# ./etcdctl watch foo
PUT
foo
v2
PUT
foo
v3
PUT
foo
v3# 其他端口对foo这个键进行操作
[rootlocalhost etcd]# ./etcdctl put foo v2
OK
[rootlocalhost etcd]# ./etcdctl put foo v3
OK
[rootlocalhost etcd]# ./etcdctl put foo v3
OK
监控多个key
# 监控以foo开头的所有键只要是foo
[rootlocalhost etcd]# ./etcdctl watch foo --prefix
PUT
foo1
muiltvalue
PUT
foo2
muiltwatch
PUT
foo3
v3
DELETE
foo3
# 另外一个客户端进行put、del操作
[rootlocalhost etcd]# ./etcdctl put foo1 muiltvalue
OK
[rootlocalhost etcd]# ./etcdctl put foo2 muiltwatch
OK
[rootlocalhost etcd]# ./etcdctl put foo3 v3
OK
[rootlocalhost etcd]# ./etcdctl del foo4
0
[rootlocalhost etcd]# ./etcdctl del foo3
1如果删除一个不存在的key时不会唤醒watch的客户端。
6、使用etcd来实现锁
go的代码示例
package mainimport (contextfmtclientv3 go.etcd.io/etcd/client/v3go.etcd.io/etcd/client/v3/concurrencylogtime
)func main() {// 初始化etcd客户端cli, err : clientv3.New(clientv3.Config{Endpoints: []string{192.168.188.101:2379}, // 替换为你的etcd集群地址DialTimeout: 5 * time.Second,})if err ! nil {log.Fatal(err)}defer cli.Close()// 创建一个上下文ctx, cancel : context.WithTimeout(context.Background(), 1000*time.Second)defer cancel()// 创建一个新的sessionsession, err : concurrency.NewSession(cli)if err ! nil {log.Fatal(err)}defer session.Close()// 使用session创建锁mutualTxn : concurrency.NewMutex(session, mutex)// 尝试获取锁err mutualTxn.Lock(ctx)if err ! nil {log.Fatal(err)}fmt.Println(Lock acquired)// 模拟一些工作time.Sleep(2 * time.Second)// 释放锁err mutualTxn.Unlock(ctx)if err ! nil {log.Fatal(err)}fmt.Println(Lock released)}