一架梯子,一头程序猿,仰望星空!

Consul键值存储


consul提供一个键值存储(k/v)数据库,我们使用这个特性,存储我们的应用配置、应用元数据和实现分布式锁。

consul支持命令方式和http api两种方式读写键值数据。

提示:存储的数据key/value都不限制类型,但是不能大于512k。

consul的键(key)是以目录树的形式组织,例如:

/tizi/consul/users
/tizi/consul/conns
/tizi/maxusers

key以这种目录树结构组织,方便我们实现前缀搜索,例如,查询/tizi 为前缀的键值数据。

命令方式

主要通过consul kv的子命令读写数据。

下面介绍通过命令方式读写键值数据

# 更新或者创建键值数据
# key = redis/config/connections
# value = 5
consul kv put redis/config/connections 5

# 读取数据
# key = redis/config/connections
consul kv get redis/config/connections

输出:5

# 查询key的详细信息
# key = redis/config/connections
consul kv get -detailed redis/config/connections

输出:
CreateIndex      802  // 创建数据的版本号
Flags            0
Key              redis/config/connections
LockIndex        0 // 用于锁处理的版本号
ModifyIndex      802  // 修改数据的版本号
Session          -
Value            5      // key对应的值

# 删除指定Key的数据
# key = redis/config/connections
consul kv delete redis/config/connections

api方式

1.更新/创建

如果Key不存在则创建一个新的,存在则更新数据。

api语法:

http://127.0.0.1:8500/v1/kv/my-key

my-key就是我们的key,更新Key的值需要发送PUT请求。

例子:

curl \
    --request PUT \
    --data "tizi365.com"\
    http://127.0.0.1:8500/v1/kv/tizi365/domain

key = tizi365/domain,value = tizi365.com

2.读取

api语法:

http://127.0.0.1:8500/v1/kv/my-key

查询指定Key的值,发送get请求即可。

例子:

curl "http://127.0.0.1:8500/v1/kv/tizi365/domain"

输出:

[
    {
        "LockIndex": 0,
        "Key": "tizi365/domain",
        "Flags": 0,
        "Value": "dGl6aTM2NS5jb20=",
        "CreateIndex": 842,
        "ModifyIndex": 842
    }
]

value值是base64编码的,读取的时候需要解码处理。

3.删除

api语法:

http://127.0.0.1:8500/v1/kv/my-key

删除指定的Key, 需要发送DELETE请求。

例子:

curl \
    --request DELETE \
    http://127.0.0.1:8500/v1/kv/tizi365/domain

4.查询前缀相同的Key有哪些

例子:

查询key前缀为/web/的所有Key, 不返回值。

http://127.0.0.1:8500/v1/kv/web?keys

返回:

[
  "/web/bar",
  "/web/foo",
  "/web/subdir/"
]

5.批量查询前缀相同的key的值

例子:

一次返回,key前缀等于tizi365的所有键值。

curl "http://127.0.0.1:8500/v1/kv/tizi365?recurse=true"

返回:

[
    {
        "LockIndex": 0,
        "Key": "tizi365/domain",
        "Flags": 0,
        "Value": "dGl6aTM2NS5jb20=",
        "CreateIndex": 842,
        "ModifyIndex": 842
    },
    {
        "LockIndex": 0,
        "Key": "tizi365/title",
        "Flags": 0,
        "Value": null,
        "CreateIndex": 934,
        "ModifyIndex": 934
    }
]