consul只key/value存储

Posted duanxz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了consul只key/value存储相关的知识,希望对你有一定的参考价值。

除了提供服务发现和综合健康检查,Consul还提供了一个易于使用的键/值存储。这可以用来保存动态配置,协助服务协调,建立领导人选举,并启用其他开发人员可以想构建的任何其他内容。

有两种方法可以使用:通过HTTP API和通过CLI API。下面的例子显示使用CLI API

D:softworksoftconsul_1.0.6_windows_amd64>consul kv get redis/config/minconns
Error! No key exists at: redis/config/minconns

你将看到没有结果返回,由于KV存储中没有该键返回了一个错误,接下来我们将插入或”put”一个值到KV存储中。

D:softworksoftconsul_1.0.6_windows_amd64>consul kv put redis/config/minconns 1
Success! Data written to: redis/config/minconns

现在再次查询该键你将看到如下结果:

D:softworksoftconsul_1.0.6_windows_amd64>consul kv get redis/config/minconns
1

在web UI上可以看到用CLI API创建的key

技术分享图片

在web UI上创建一个“duan”的key:

技术分享图片

再通过CLI API查询结果:

技术分享图片

 

Consul保留额外的元数据在该字段,你可以使用-detailed标志检索详细信息:

root@server1:~# consul kv get -detailed redis/config/minconns
CreateIndex      1049
Flags            0
Key              redis/config/minconns
LockIndex        0
ModifyIndex      1049
Session          -
Value            1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

设置值的时候,还可以使用-flags标志
- -flags=<uint>
Unsigned integer value to assign to this key-value pair. This value is not read by Consul, so clients can use this value however makes sense for their use case. The default value is 0 (no flags).

flags用来做客户端自定义标志,consul并不使用它,你可以在你自己的程序中随便定义

root@server1:~# consul kv put -flags=42 redis/config/users/admin abcd1234
Success! Data written to: redis/config/users/admin
  • 1
  • 2

设置flag值为42,想设置成什么就设置成什么.所有的键都支持设置一个64位的整型值。

使用-recurse选项可以列出KV存储中所有keys,返回的结果将按照字母排序。

root@server1:~# consul kv get -recurse
redis/config/minconns:1
redis/config/users/admin:abcd1234
  • 1
  • 2
  • 3

使用delete命令删除KV存储中指定的key。

root@server1:~# consul kv delete redis/config/minconns
Success! Deleted key: redis/config/minconns
  • 1
  • 2

还可以使用recurse选项递归选项删除含某个前缀的所有keys:

root@server1:~# consul kv delete -recurse redis
Success! Deleted keys with prefix: redis
  • 1
  • 2

如果要更新一个存在键的值,可以put一个新值在同样的路径上。

root@server1:~# consul kv put foo bar
Success! Data written to: foo
root@server1:~# consul kv get foo
bar
root@server1:~# consul kv put foo zip
Success! Data written to: foo
root@server1:~# consul kv get foo
zip
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

Consul可以使用Check_And_Set提供原子键更新操作。执行CAS操作时需指定-cas标志。至于什么是CAS,请自行百度吧
- -modify-index=<uint>
Unsigned integer representing the ModifyIndex of the key. This is used in combination with the -cas flag.

首先查询foo这个key的详细信息

root@server1:~# consul kv get -detailed foo
CreateIndex      1065
Flags            0
Key              foo
LockIndex        0
ModifyIndex      1067
Session          -
Value            zip
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

看到foo的索引编号ModifyIndex是1067。然后使用CAS操作的方式来修改它

root@server1:~# consul kv put -cas -modify-index=1067 foo bar
Success! Data written to: foo
  • 1
  • 2

修改成功,再查询

root@server1:~# consul kv get -detailed foo
CreateIndex      1065
Flags            0
Key              foo
LockIndex        0
ModifyIndex      1091
Session          -
Value            bar
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

ModifyIndex变成1091了。依然使用上面那个修改命令试试

root@server1:~# consul kv put -cas -modify-index=1067 foo bar
Error! Did not write to foo: CAS failed
  • 1
  • 2

失败了。原因是第一次CAS操作成功,因为ModifyIndex的值是1067,我们输入的也是-modify-index=1067。
第二次操作失败,ModifyIndex已经变成1091了,我们还用-modify-index=1067,Check_And_SetS中的Check这步就失败了,不会再Set了。

技术分享图片

 

以上是关于consul只key/value存储的主要内容,如果未能解决你的问题,请参考以下文章

consul

Consul的应用

Consul 简介及集群安装

基于Consul的分布式锁实现

Consul KV

Spring Cloud——Consul服务注册中心的介绍安装与使用