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
}
]