键值数据

除了 服务发现健康检查Consul 还提供一个易于使用的 KV 存储。这可以用来存储动态配置、辅助服务协调、构建领袖选举等,甚至做任何开发人员能够想到的事情。

简明用法

KV 存储更容易入门,接下来我们创建几个键值来演示一下。与 Consul键值存储 打交道有两种不同方式: HTTP 接口或者 命令行接口 ( CLI )。下面的例子使用 命令行接口 进行,因为这样更为方便。更高级的集成,可以参考 Consul KV HTTP API文档

查询 给定 ( key ) redis/config/minconns 对应的 ( value ):

  1. $ consul kv get redis/config/minconns
  2. Error! No key exists at: redis/config/minconns

可以看到,我们没有得到任何结果,因为该键根本没有存储任何值。接着,我们往存储 插入 一些键值:

  1. $ consul kv put redis/config/minconns 1
  2. Success! Data written to: redis/config/minconns
  1. $ consul kv put redis/config/maxconns 25
  2. Success! Data written to: redis/config/maxconns
  1. $ consul kv put -flags=42 redis/config/users/admin abcd1234
  2. Success! Data written to: redis/config/users/admin

现在存储已经有数据了,可以根据键将值 查询 出来:

  1. $ consul kv get redis/config/minconns
  2. 1

Consul 也可以返回额外的 元数据 ,指定 -detailed 参数即可:

  1. $ consul kv get -detailed redis/config/minconns
  2. CreateIndex 207
  3. Flags 0
  4. Key redis/config/minconns
  5. LockIndex 0
  6. ModifyIndex 207
  7. Session -
  8. Value 1

redis/config/users/admin 键上,我们存储了一个值为 42标识 ( flag )。Consul 支持 64 位的标识值。标识值不是 Consul 内部使用的,而是客户端用来为 键值 添加带语义的元数据。

通过 -recurse 参数,可以 列举 存储内所有的键,返回结果以字母排序:

  1. $ consul kv get -recurse
  2. redis/config/maxconns:25
  3. redis/config/minconns:1
  4. redis/config/users/admin:abcd1234

从存储中 删除 某个键,需要调用 delete 指令:

  1. $ consul kv delete redis/config/minconns
  2. Success! Deleted key: redis/config/minconns

递归删除 某个前缀下所有键也是支持的,同样是指定 -recurse 参数:

  1. $ consul kv delete -recurse redis
  2. Success! Deleted keys with prefix: redis

在同样的键上再次执行 put 指令即可 更新 对应的值:

  1. $ consul kv put foo bar
  2. $ consul kv get foo
  3. bar
  4. $ consul kv put foo zip
  5. $ consul kv get foo
  6. zip

Consul 也支持原子的 检查并设置 ( Check-And-Set )型更新操作,指定 -cas 参数即可:

  1. $ consul kv put -cas -modify-index=123 foo bar
  2. Success! Data written to: foo
  3. $ consul kv put -cas -modify-index=123 foo bar
  4. Error! Did not write to foo: CAS failed

第一个更新操作成功因为记录索引刚好是 123 ,第二次则失败因为索引不再是 123 了。

下一步

由于篇幅关系,我们只介绍了若干个操作接口,完整接口可以查看文档:

下一节,我们介绍: Web UI

订阅更新,获取更多学习资料,请关注我们的 微信公众号

../../../_images/wechat-mp-qrcode.png小菜学编程

参考文献