上手在github提交了python gevent etcd的非阻塞模块。 正好这两天寂寞的很,打算再重写下etcd 输入更改数据这块的逻辑。 搜相关文档的时候,发现很多资料对于etcd http api写入数据描述,很是模糊片面,愣是没找到像样点的代码样式。正好趁着有时间,就把这方面的资料给补全下。或许对大家有些用处。 

关于数据写入etcd http api的文档地址:

http://xiaorui.cc/2015/10/14/%E5%85%B3%E4%BA%8E%E6%95%B0%E6%8D%AE%E5%86%99%E5%85%A5%E7%9A%84etcd-http-api%E6%96%87%E6%A1%A3%E8%A7%A3%E9%87%8Apython/

下面是写入修改的etcd api接口样式:

/v2/keys/{ path }[prevValue=string||prevIndex=int][prevExist=boolean]

Method :  PUT

我们会注意到etcd写入数据时,会有三个参数 prevValue、prevIndex、prevExist 。

prevExist  

判断是否存在

prevExist = True ,不管有没有这个key,都会写入value ,可以理解为强制写入 

client.write(‘/a/k3′,’xiaorui.cc’,prevExist=True)

如果 prevExist = False的话 ,就会异常报错 ,etcd的默认参数就是 False

client.write(‘/a/k3′,’xiaorui.cc’,prevExist=False)


prevValue

当匹配prevValue 值时,才进行写入数据,也就是说,如果/a/xiaorui值不为mm,那么就报错。 

client.write(‘/a/xiaorui’,'nima’,prevValue=’mm’)

prevIndex

这个的用法同prevValue ,我这里就不再废话了。  prevIndex对于我来说,很少会用的。 

python的代码样式:

—result:

Response
200 (OK)

curl的命令样式:

上面的方法有些麻烦,接口的样式让人有些发愣,其实etcd提供了让人看起来更加舒服的接口。

重新开始测试下,首先我们put记录,因为是第一次对这个key进行操作,所以成功。 

当我们再次put的时候,会提示key已经存在。  怎么破? 加入prevExist=true就可以了。 前面怎么有说过,prevExist的强制写入。 

如果key不等于prevValue值的话,那么就会提示失败 !

如果prevValue跟之前的value想匹配的话,就会执行成功。 


删除key的样例


END…



对Python及运维开发感兴趣的朋友可以加QQ群 : 478476595 !!!

另外如果大家觉得文章对你有些作用!   帮忙点击广告. 一来能刺激我写博客的欲望,二来好维护云主机的费用.
如果想赏钱,可以用微信扫描下面的二维码. 另外再次标注博客原地址  xiaorui.cc  ……   感谢!

用gevent开发非阻塞的etcd python客户端模块

起因,我这边有个服务端,是专门控制服务发现和注册功能,任务的调度都是用gevent来实现,如果直接在gevent里使用python-etcd,会发生阻塞的,gevent对于那...

阅读全文

开源项目之python使用etcd构造分布式互斥锁

    前几天跟朋友聊了下分布式互斥锁的事,我以前用过redis和zookeeper做分布式的互斥锁,但那哥们的场景下已经用了etcd,不再想引入其他的服务...

阅读全文

使用etcd watch做服务发现监控时遇到的坑

最近在公司折腾业务数据监控的事,听上面的意思,要把这监控做成部门的数据监控平台,接入各种各样的数据流监控,一听这目标,霎时间就不想继续开发了̷...

阅读全文