已解决:我尝试将单个 SerialKey 附加到列表中。当我现在用一个键附加一个 SerialKeyList 时,它可以正常工作。
我将 memcached 与 libmemcached 和 google 协议缓冲区一起使用,以在缓存中保存一个列表,该列表由元素列表和列入黑名单的元素列表组成。
.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() 附加 SerialKey 或 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 编码文档中,我了解到重复字段不必跟随另一个,因此应该可以交错其他类型的字段。
/ EDIT:列表中只有一种类型的元素(SerialKey)有同样的问题。这里我使用 SerialKey 上的另一个属性来确定它是否在黑名单中。原型:
message SerialKeyList {
repeated SerialKey key = 1;
}
message SerialKey {
required string key = 1;
required bool white = 2 [default = true];
}