首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >memcache append/prepend with google protocol buffer

memcache append/prepend with google protocol buffer
EN

Stack Overflow用户
提问于 2012-03-20 00:38:38
回答 1查看 611关注 0票数 1

已解决:我尝试将单个SerialKey附加到列表中。现在,当我用一个键追加一个SerialKeyList时,它就可以正常工作了。

我使用memcached和libmemcached以及google protocol buffers在缓存中保存一个列表,其中包含一个元素列表和一个列入黑名单的元素列表。

.proto为:

代码语言:javascript
复制
message SerialKeyList {
repeated SerialBlackKey bkey = 2;
repeated SerialKey key = 1;
}

message SerialKey {
optional string key = 1;
}

message SerialBlackKey {
optional string key = 2;
}

我想用memcached_append()附加SerialKey或SerialBlackKey类型的单个元素。我用一个SerialKey元素(用memcached_set(SerialKeyList))初始化这个列表,然后追加一个SerialBlackKey元素(用memcached_append)。

在解析memcached中的列表并使用PrintDebugString()打印时,我得到的结果是

代码语言:javascript
复制
key {
  key: "REPL:http://a.host.com/replica" 
}
bkey {
  10: "PL:http://a.host.com/replica" 
}

所以这两个列表被创建了,但是第二个元素没有被正确读取。

这是可能的吗?从Protobuf编码的documentation中,我了解到重复的字段不必跟在另一种类型之后,因此另一种类型的交错字段应该是可能的。

/EDIT:我在列表中只有一种类型的元素(SerialKey)也有同样的问题。在这里,我使用SerialKey的另一个属性来决定它是否在黑名单中。原件:

代码语言:javascript
复制
message SerialKeyList {
  repeated SerialKey key = 1;
}

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

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-20 00:51:34

您是对的- te规范指出,实现必须允许任何顺序的字段,特别是为了支持这种追加场景。

附加的关键是它必须仍然看起来像SerialKeyList,即使您只附加了一个SerialKey或SerialBlackKey的SerialKeyList。

还要注意:如果你使用的是字符串版本,我不知道append是否起作用--尽管二进制版本肯定是可追加的。

要获得更具体的答案,您可能需要说明您是如何构建的,并说明您正在使用哪个实现。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9774123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档