2012-03-19 60 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