2012-03-19 65 views
1

解決:我試着追加一個單一的SerialKey到列表。當我現在將一個SerialKeyList附加到一個密鑰時,它的工作原理應該如此。memcache追加/ prepend與谷歌協議緩衝區

我使用與libmemcached和谷歌協議緩衝區memcached來保存在其中包括的元素的列表,並列入黑名單的元素的列表的高速緩存的列表。

的.proto是:

message SerialKeyList { 
repeated SerialBlackKey bkey = 2; 
repeated SerialKey key = 1; 
} 

message SerialKey { 
optional string key = 1; 
} 

message SerialBlackKey { 
optional string key = 2; 
} 

我想追加與memcached_append任一類型的串行鍵或SerialBlackKey的單一元件()。 我使用一個SerialKey元素(使用memcached_set(SerialKeyList))初始化列表,然後追加一個SerialBlackKey元素(使用memcached_append)。

分析從Memcached和印刷用PrintDebugString名單(當我得到的結果)是

key { 
    key: "REPL:http://a.host.com/replica" 
} 
bkey { 
    10: "PL:http://a.host.com/replica" 
} 

因此要創建兩個列表,但第二個元素是不正確讀取。

應該可以嗎?從Protobuf編碼documentation我知道重複字段不必緊跟另一個字段,因此應該可以使用其他類型的交叉字段。

/編輯:我有隻有一個列表中的類型的元件(串行鍵)同樣的問題。 這裏我使用SerialKey上的其他屬性來決定它是否在黑名單中。 原:

message SerialKeyList { 
    repeated SerialKey key = 1; 
} 

message SerialKey { 
    required string key = 1; 
    required bool white = 2 [default = true]; 
} 

回答

0

你是對的 - 德規範規定,實施必須允許領域以任意順序,明確支持這個附加方案。

的關鍵,追加是,它仍然必須看起來像一個SerialKeyList,即使你追加只是一個單一的串行鍵或SerialBlackKey一個SerialKeyList。

還請注意:我不知道,如果追加的工作,如果你使用的是字符串版本 - 二進制版本肯定是追加,雖然。

對於您所使用的執行,你可能需要向您展示如何構建這個更具體的答案,和狀態。

+0

您在側句子解決我的問題:) 我想追加一個串行鍵到列表中。 當我現在追加一個SerialKeyList與一個關鍵,它的工作原理應該是。 – devjat 2012-03-19 17:40:52

+0

@ user1279035我有一個預感它會是:p – 2012-03-19 18:21:04