Consul之:key/value存储
key/value作用
- 动态修改配置文件
- 支持服务协同
- 建立leader选举
- 提供服务发现
- 集成健康检查
除了提供服务发现和综合健康检查,Consul还提供了一个易于使用的键/值存储。这可以用来保存动态配置,协助服务协调,建立领导人选举,并启用其他开发人员可以想构建的任何其他内容。
有两种方法可以使用:通过HTTP API和通过CLI API。
一、使用CLI API操作key/value
1、consul kv get 查询
D:\soft\worksoft\consul_1..6_windows_amd64>consul kv get redis/config/minconns
Error! No key exists at: redis/config/minconns
你将看到没有结果返回,由于KV存储中没有该键返回了一个错误,接下来我们将插入或”put”一个值到KV存储中。
2、consul kv put增加key/value
D:\soft\worksoft\consul_1..6_windows_amd64>consul kv put redis/config/minconns
Success! Data written to: redis/config/minconns
现在再次查询该键你将看到如下结果:
D:\soft\worksoft\consul_1..6_windows_amd64>consul kv get redis/config/minconns
Consul保留额外的元数据在该字段,你可以使用-detailed标志检索详细信息:
D:\soft\worksoft\consul_1..6_windows_amd64>consul kv get -detailed redis/config/minconns
CreateIndex
Flags
Key redis/config/minconns
LockIndex
ModifyIndex
Session -
Value
在web UI上可以看到用CLI API创建的key
在web UI上创建一个“duan”的key:
再通过CLI API查询结果:
设置值的时候,还可以使用-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并不使用它,你可以在你自己的程序中随便定义
D:\soft\worksoft\consul_1..6_windows_amd64>consul kv put -flags= redis/config/users/admin abcd1234
Success! Data written to: redis/config/users/admin
设置flag值为42,想设置成什么就设置成什么.所有的键都支持设置一个64位的整型值。
3、consul kv get -recurse 列表查询
使用-recurse选项可以列出KV存储中所有keys,返回的结果将按照字母排序。
D:\soft\worksoft\consul_1..6_windows_amd64>consul kv get -recurse
redis/config/minconns:
redis/config/users/admin:abcd1234
4、consul kv delete删除
使用delete命令删除KV存储中指定的key。
D:\soft\worksoft\consul_1..6_windows_amd64>consul kv delete redis/config/minconns
Success! Deleted key: redis/config/minconns
还可以使用recurse选项递归选项删除含某个前缀的所有keys:
D:\soft\worksoft\consul_1..6_windows_amd64>consul kv delete -recurse redis
Success! Deleted keys with prefix: redis
如果要更新一个存在键的值,可以put一个新值在同样的路径上。
D:\soft\worksoft\consul_1..6_windows_amd64>consul kv put foo bar
Success! Data written to: foo D:\soft\worksoft\consul_1..6_windows_amd64>consul kv get foo
bar D:\soft\worksoft\consul_1..6_windows_amd64>consul kv put foo zip
Success! Data written to: foo
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的详细信息
D:\soft\worksoft\consul_1..6_windows_amd64>consul kv get -detailed foo
CreateIndex
Flags
Key foo
LockIndex
ModifyIndex
Session -
Value zip
看到foo的索引编号ModifyIndex是133。然后使用CAS操作的方式来修改它
D:\soft\worksoft\consul_1..6_windows_amd64>consul kv put -cas -modify-index= foo bar
Success! Data written to: foo
修改成功,再查询
D:\soft\worksoft\consul_1..6_windows_amd64>consul kv get -detailed foo
CreateIndex
Flags
Key foo
LockIndex
ModifyIndex
Session -
Value bar
ModifyIndex变成141了。依然使用上面那个修改命令试试
D:\soft\worksoft\consul_1..6_windows_amd64>consul kv put -cas -modify-index= foo bar
Error! Did not write to foo: CAS failed
失败了。原因是第一次CAS操作成功,因为ModifyIndex的值是141,我们输入的也是-modify-index=133。
第二次操作失败,ModifyIndex已经变成141了,我们还用-modify-index=133,Check_And_SetS中的Check这步就失败了,不会再Set了。
二、使用http API操作key/value
2.1、查看全部key/value http://127.0.0.1:8500/v1/kv/?recurse
说明:
- 使用?recurse参数来指定查看多个KV
- 没有值--404
2.2、添加key/value
说明:flags--用于为任意一个KV添加一个有意义的metadata。
注意:上边的这个就是有问题的,一定要注意是flags而非flag。
2.3、查看单个key/value
说明:value是test的base64编码(使用base64编码是为了允许非UTF-8的字符)
2.4、修改key/value
cas的值如果与ModifyIndex相等,则修改成功,若不相等,则修改失败。
2.5、删除key/value
2.5.1、删除单一KV
2.5.2、删除一定范围的KV(指定前缀范围内的KV)
说明:
- 指定删除的KV的K的前缀(zjg)
- 多个操作一定要有?recurse参数
三、使用Consul 的key/value存储替换config server
由于consul自带kv存储,完全可以取代config server。
步骤如下:
一、先添加jar依赖
//compile 'org.springframework.cloud:spring-cloud-starter-config'
compile 'org.springframework.cloud:spring-cloud-starter-consul-config'
之前config server的依赖去掉,换成consul-config的依赖即可。
二、修改bootstrap.yml文件

1 spring:
2 ...
3 cloud:
4 consul:
5 host: 127.0.0.1
6 port: 8500
7 discovery:
8 tags: version=1.0,author=yjmyzz
9 healthCheckPath: /info.json
10 healthCheckInterval: 5s
11 instanceId: ${spring.application.name}:${spring.cloud.client.ipAddress}
12 enabled: true
13 config:
14 enabled: true
15 format: YAML
16 prefix: config
17 defaultContext: application
18 profileSeparator: ','
19 data-key: data
20 # config:
21 # label: dev
22 # discovery:
23 # enabled: true
24 # service-id: my-config-server
25 # fail-fast: true
26 # retry:
27 # max-interval: 1500
28 # max-attempts: 5
29 # multiplier: 1.2

关键是13-19行,解释一下:
15行 format:YAML 表示consul中的key-value中的value内容,采用YAML格式
16行 prefix: config 表示consul用于存储配置的文件夹根目录名为config
17行 defaultContext: application 表示配置文件对应的应用名称(eg: 你的服务如果打算取名为myApp,则这里的application就要换成myApp)
18行 profileSeparator: ',' 表示如果有多个profile(eg: 开发环境dev,测试环境test...) ,则key名中的profile与defaultContext之间,用什么分隔符来表示(这里有点费解,后面还会详细解释)
19行 data-key: data 表示最后一层节点的key值名称,一般默认为data
三、consul中创建kv配置节点
很多文章,包括官方文档这一步都讲得不明不白,关键是 节点名称的命名规则,要与bootstrap.yml中的配置一样,比如我们要创建一个test环境的配置,key名可以取为:
config/application,test/data
这里每一个部分,都要与上一步bootstrap.yml中的一致,上图中5个剪头所指,大家结合上一步中15-19行的解释体会一下。
然后Value值的部分,把配置内容按yml格式填进去就行:
tips: 平时开发时,一般使用consul dev模式,开发模式下kv存储不会持久化存储,全在内存中(重启consul就丢了!),所以一般建议yml配置文件内容,在项目中单独存一个文件,启动调试时,直接把配置文件内容贴到Value框里即可。
好了,现在你可以试着启动下,顺利的话,应该就可以了,是不是很简单,关键还省掉了config server的部署,帮公司省了机器,别忘了让领导给你加绩效哦^_^
如果希望用代码的方式来读/写 KV存储,可以用下面的方式:
读:
curl http://localhost:8500/v1/kv/config/application,dev/data?raw=true
Consul之:key/value存储的更多相关文章
- Tair分布式key/value存储
[http://www.lvtao.net/database/tair.html](特别详细) tair 是淘宝自己开发的一个分布式 key/value 存储引擎. tair 分为持久化和非持久化 ...
- 淘宝分布式 key/value 存储引擎Tair安装部署过程及Javaclient測试一例
文件夹 1. 简单介绍 2. 安装步骤及问题小记 3. 部署配置 4. Javaclient測试 5. 參考资料 声明 1. 以下的安装部署基于Linux系统环境:centos 6(64位),其他Li ...
- MySQL key/value存储方案(转)
需求 250M entities, entities表共有2.5亿条记录,当然是分库的. 典型解决方案:RDBMS 问题:由于业务需要不定期更改表结构,但是在2.5亿记录的表上增删字段.修改索引需要锁 ...
- consul读取key value
1.nuget 搜索consul安装 2. using (var client = new ConsulClient()) { var kvPair = client.KV.Get(key).Resu ...
- Java中Map<Key, Value>存储结构根据值排序(sort by values)
需求:Map<key, value>中可以根据key, value 进行排序,由于 key 都是唯一的,可以很方便的进行比较操作,但是每个key 对应的value不是唯一的,有可能出现多个 ...
- java中key-value数据有重复KEY如何存储
http://www.iteye.com/problems/87219 Map<Key, List<Value>>, 这个好 师兄厉害,给介绍了个神器:guava
- php array key 的存储规则
刚刚写程序遇到php数组取值的问题,发现字符串和数字取出来的是一样的. key 可以是 integer 或者string.value 可以是任意类型. 此外 key 会有如下的强制转换: 包含有合法整 ...
- 服务注册发现consul之四: 分布式锁之四:基于Consul的KV存储和分布式信号量实现分布式锁
一.基于key/value实现 我们在构建分布式系统的时候,经常需要控制对共享资源的互斥访问.这个时候我们就涉及到分布式锁(也称为全局锁)的实现,基于目前的各种工具,我们已经有了大量的实现方式,比如: ...
- Consul KV
Consul之:key/value存储 key/value作用 动态修改配置文件 支持服务协同 建立leader选举 提供服务发现 集成健康检查 除了提供服务发现和综合健康检查,Consul还提供了一 ...
随机推荐
- 【mybatis源码学习】mybtias基础组件-占位符解析器
一.占位符解析器源码 1.占位符解析器实现的目标 通过解析字符串中指定前后缀中的字符,并完成相应的功能. 在mybtias中的应用,主要是为了解析Mapper的xml中的sql语句#{}中的内容,识别 ...
- ASP.NET MVC中有四种过滤器类型
在ASP.NET MVC中有四种过滤器类型
- day2 大纲笔记
1, pycharm的使用2,昨日内容回顾(作业讲解) 编译型 解释型 python2x: 混乱 冗余 python3x: 规范,清晰 变量: 常量:一直不变的量.全部大写的变量 常量. 注释: # ...
- node api 之:Buffer
在 ECMAScript 2015 引入 TypedArray 之前,JavaScript 语言没有读取或操作二进制数据流的机制. Buffer 类被引入作为 Node.js API 的一部分,使其可 ...
- 菜鸟如何使用hanlp做分词的过程记录
菜鸟如何使用hanlp做分词的过程记录 最近在学习hanlp的内容,准备在节后看看有没有时间整理一波hanlp分享下,应该还是会像之前分享DKHadoop一样的方式吧.把整个学习的过程中截图在配文字的 ...
- 深入理解java虚拟机读后总结(个人总结记录)
1.jvm布局: jdk1.6版本JVM布局分为:heap(堆),method(方法区),stack(虚拟机栈),native stack(本地方法栈),程序计数器共五大区域. 其中方法区包含运行 ...
- piwik高负载加速之切换session存储位置
默认情况下,piwik的session是存储于根目录下面的tmp/sessions/路径下面的.而官方文档里面说,如果由于本地硬盘的原因,这种设置可能会导致系统被变慢,这在高负载系统应用中可能是不可以 ...
- 解决 VUE 微信登录验证 【感谢原文:https://segmentfault.com/a/1190000009493199】
[感谢原文:https://segmentfault.com/a/1190000009493199] SPA单页应用中微信授权登录的一点思路 单页应用应该如何解决微信授权登录的尴尬跳转?后退无法返回? ...
- Java Base64编码
使用commons-codec, 下载地址 http://commons.apache.org/proper/commons-codec/ 下载commons-codec-1.12-bin.zip,解 ...
- TextBox限制输入字母、数字、退格键
公共方法如下: /// <summary> /// 正则表达式验证只能输入数字或字母 /// </summary> /// <param name="pendi ...