Consul入门06 - 键/值对数据
為了提供服務發現以及健康檢測,Consul提供了非常容易使用的鍵/值對存儲。它能被用于存儲動態配置信息,幫助服務協作,建構leader選舉機制,以及開發者可以想到的建構任何其它的東西。
本篇假設你至少有一個Consul代理在運行。
簡單使用
為了展示存儲鍵/值對是非常簡單的,我們將在鍵/值存儲里維護一些鍵。
我們在運行代理步驟中展示了查詢本地代理,我們先驗證鍵/值存儲中沒有任何鍵存在:
$ curl -v http://localhost:8500/v1/kv/?recurse * About to connect() to localhost port 8500 (#0) * Trying 127.0.0.1... connected > GET /v1/kv/?recurse HTTP/1.1 > User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3 > Host: localhost:8500 > Accept: */* > < HTTP/1.1 404 Not Found < X-Consul-Index: 1 < Date: Fri, 11 Apr 2014 02:10:28 GMT < Content-Length: 0 < Content-Type: text/plain; charset=utf-8 < * Connection #0 to host localhost left intact * Closing connection #0因為沒有任何鍵,所以我們得到了404的響應,我們可以用?PUT?來存儲一些鍵:
$ curl -X PUT -d 'test' http://localhost:8500/v1/kv/web/key1 true $ curl -X PUT -d 'test' http://localhost:8500/v1/kv/web/key2?flags=42 true $ curl -X PUT -d 'test' http://localhost:8500/v1/kv/web/sub/key3 true $ curl http://localhost:8500/v1/kv/?recurse [{"CreateIndex":97,"ModifyIndex":97,"Key":"web/key1","Flags":0,"Value":"dGVzdA=="},{"CreateIndex":98,"ModifyIndex":98,"Key":"web/key2","Flags":42,"Value":"dGVzdA=="},{"CreateIndex":99,"ModifyIndex":99,"Key":"web/sub/key3","Flags":0,"Value":"dGVzdA=="}]這里我們創建了3個鍵,每個都關聯了值"test"。注意?值?字段的返回是基于base64的編碼,該編碼允許非UTF8字符集。對于鍵"web/key2",我們為其設置了一個42的?標記。所有的鍵都支持設置一個64位長的整形標記值。這個標記并不是由Consul內部使用的,它可以被用于存儲任意鍵值對的元數據信息。
在設置值之后,我們使用??recurse?參數發出了?GET?請求來接收多個鍵的信息。
你也可以非常容易地獲取單個鍵的信息:
$ curl http://localhost:8500/v1/kv/web/key1 [{"CreateIndex":97,"ModifyIndex":97,"Key":"web/key1","Flags":0,"Value":"dGVzdA=="}]刪除一個鍵也同樣非常簡單,使用?DELETE?來刪除一個鍵。我們可以指定完整路徑來刪除單獨一個鍵,或者使用"?recurse"遞歸刪除所有的鍵:
$ curl -X DELETE http://localhost:8500/v1/kv/web/sub?recurse $ curl http://localhost:8500/v1/kv/web?recurse [{"CreateIndex":97,"ModifyIndex":97,"Key":"web/key1","Flags":0,"Value":"dGVzdA=="},{"CreateIndex":98,"ModifyIndex":98,"Key":"web/key2","Flags":42,"Value":"dGVzdA=="}]使用一個?PUT?請求相同的URI并且提供一個不同的消息體就可以修改指定的鍵,Consul提供了一個?檢測并設置?的操作,對應的操作是原子的。通過在GET請求中提供??cas=?參數以及指定最新的?ModifyIndex?值我們就可以得到原子CAS操作。例如,假設我們想要更新"web/key1":
$ curl -X PUT -d 'newval' http://localhost:8500/v1/kv/web/key1?cas=97 true $ curl -X PUT -d 'newval' http://localhost:8500/v1/kv/web/key1?cas=97 false這里,第一個CAS更新成功了因為最新的?ModifyIndex?是97,而第二個操作失敗了因為最新的?ModifyIndex?不再是97了。
我們可以使用?ModifyIndex?來等待指定鍵值的改變,例如,假設我們想要等待Key2的修改:
$ curl "http://localhost:8500/v1/kv/web/key2?index=101&wait=5s" [{"CreateIndex":98,"ModifyIndex":101,"Key":"web/key2","Flags":42,"Value":"dGVzdA=="}]通過提供"?index="參數,我們請求等待直到鍵包含了一個大于101的?ModifyIndex?的值。無論如何由于"?wait=5"參數限制了查詢最多等待5秒,之后會返回當前沒有修改的值。該操作可以高效地等待鍵的更新。另外相同的方法可以用于等待一個鍵的集合,直到鍵集合中任何一個鍵發生的更新。
下一步
這里的例子僅僅展示了部分的API使用。如果需要完整的文檔,請查詢the /kv/ route of the HTTP API。
下一步,我們將看看Consul支持的[web界面]()中的選項
總結
以上是生活随笔為你收集整理的Consul入门06 - 键/值对数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Consul入门05 - 健康检测
- 下一篇: Consul入门07 - Consul