1. 程式人生 > >Consul入門06 - 鍵/值對資料

Consul入門06 - 鍵/值對資料

轉載地址為:https://segmentfault.com/a/1190000005040921

為了提供服務發現以及健康檢測,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秒,之後會返回當前沒有修改的值。該操作可以高效地等待鍵的更新。另外相同的方法可以用於等待一個鍵的集合,直到鍵集合中任何一個鍵發生的更新。


相關推薦

Consul入門06 資料

轉載地址為:https://segmentfault.com/a/1190000005040921 為了提供服務發現以及健康檢測,Consul提供了非常容易使用的鍵/值對儲存。它能被用於儲存動態配置資訊,幫助服務協作,建構leader選舉機制,以及開發者可以想到的建

節點資料轉換為json、xml資料

自動化框架的難點和重點不是自動化技術本身,而是如何對資料進行有效的管理。資料驅動的形式一般是Excel或者DB,但是二者儲存資料的形式均為key-value型,因此,如何把單一的鍵值對轉換為複雜的json或xml,就成了資料處理的重點。規則約定:(以值形式的不同來區分節點的型

【自然語言處理入門】01:利用jieba資料集進行分詞,並統計詞頻

一、基本要求 使用jieba對垃圾簡訊資料集進行分詞,然後統計其中的單詞出現的個數,找到出現頻次最高的top100個詞。 二、完整程式碼 # -*- coding: UTF-8 -*- fr

通過遍歷JSON獲取包含某字串的_電腦計算機程式設計入門教程自學

有時JSON物件中的鍵名是變化的, 但每次變化都會有規律, 包含有特定的字串字首, 所以如果想要獲取它的值,可 以通過遍歷鍵值對的方式, 判斷如此此鍵名包含有特定字串則取出此鍵的值. 原始碼如下: import console; var str = /

js序列化封裝成一個象,以的方式

tle {} ora serialize strong push com alt tro js序列化封裝成一個對象,以鍵值對的方式 類似:Object {ni: "1", wo: "2", ta: "3", huge: "4", jindong: "5"…} jque

Spark學習筆記3:操作

對象 常用 ava java 參數 通過 頁面 ascend 處理過程 鍵值對RDD通常用來進行聚合計算,Spark為包含鍵值對類型的RDD提供了一些專有的操作。這些RDD被稱為pair RDD。pair RDD提供了並行操作各個鍵或跨節點重新進行數據分組的操作接口。 Sp

JavaSE8基礎 HashMap<Integer,String> entrySet遍歷 的集合

system brush 現象 image 基礎 cli 集合 eas 所有 os :windows7 x64 jdk:jdk-8u131-windows-x64 ide:Eclipse Oxygen Release (4.7.0) code: p

JavaSE8基礎 HashMap remove 刪除指定的

() ava 七天 result [] api 現象 成功 port os :windows7 x64 jdk:jdk-8u131-windows-x64 ide:Eclipse Oxygen Release (4.7.0) code: p

JavaSE8基礎 HashMap remove 根據來刪除

print 基礎 ret 優秀 有一個 然而 java源碼 lock 技術分享 os :windows7 x64 jdk:jdk-8u131-windows-x64 ide:Eclipse Oxygen Release (4.7.0) cod

JavaSE8基礎 HashMap isEmpty clear 判斷該映射空不空與刪除所有

eas pty java 映射 turn map string ati imp os :windows7 x64 jdk:jdk-8u131-windows-x64 ide:Eclipse Oxygen Release (4.7.0) code:

Hashtable 集合

var ole ons nta nbsp console lin write reac // Hashtable 鍵值對集合 一個鍵對應一個值 Hashtable ht=new Hashtable();

[C#]使用Redis來存儲(Key-Value Pair)

all style lease scons ice 包管理 列表 有序集合 全部 本文為原創文章、源代碼為原創代碼,如轉載/復制,請在網頁/代碼處明顯位置標明原文名稱、作者及網址,謝謝! 開發工具:VS2017 語言:C# DotNet版本:.Net

C# 發送http方法,利用 KeyValuePair,發送分頁命令,日歷的開始和結束時間命令(POST)

!= 方法 call value face all 發送 keyvalue analysis 一個HTTP的類裏面: public static string HttpClientPost(string url, string taskIdx, string

Learning Spark中文版--第四章--使用(2)

最小 定制 單個 locate 最大限度 ces 之一 定期 情況 Actions Available on Pair RDDs (鍵值對RDD可用的action) ??和transformation(轉換)一樣,鍵值對RDD也可以使用基礎RDD上的action(開工),並

數據字典Dictionary存放

鍵值 err opened str ner oid read mes name 1. 方法思路: 使用數據字典【Dictionary<string, string>】,聲明一個list集合,將“XML子節點名稱”、“節點值”以鍵【節點名稱】值【節點值】對

遍歷的兩種方法

blog key pre value 遍歷 post body 包裝 function 1、object.keys for (var key of Object.keys(someObject)) { console.log(key + ‘: ‘ + someObje

Intellij IDEA 生成返回象快捷

不必要 -- xtra style 需要 實現 alt ctr ext 在編寫一行JAVA語句時,有返回值的方法已經決定了返回對象的類型和泛型類型,我們只需要給這個對象起個名字就行。 如果使用快捷鍵生成這個返回值,我們就可以減少不必要的打字和思考,專註於過程的實現。 步驟:

獲取json的對應字符串

out val stat get 獲取 sta sys bject value 獲取json中的姓名 json串ac 關鍵字key public class Json { public static String json(String key;String ac) {

ConfigurationManager 讀寫AppSettings

ews con one sku err except line exceptio names using System; using System.Configuration; namespace ConsoleApplication1 { class Prog

6.spark core之操作

方式 lines () end 結果 字符 額外 creat 很多 鍵值對RDD(pair RDD)是spark中許多操作所需要的常見數據類型,通常用來進行聚合計算。 創建Pair RDD ??spark有多種方式可以創建pair RDD。比如:很多存儲鍵值對的數據格式在讀