解決済み: リストに単一の SerialKey を追加しようとしました。SerialKeyList に 1 つのキーを追加すると、正常に機能します。
要素のリストとブラックリストに登録された要素のリストで構成されるリストをキャッシュに保存するために、libmemcached および Google プロトコル バッファと共に 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() を使用して、SerialKey または SerialBlackKey のいずれかのタイプの単一要素を追加したいと考えています。1 つの SerialKey 要素 (memcached_set(SerialKeyList) を使用) でリストを初期化し、1 つの SerialBlackKey 要素を (memcached_append を使用して) 追加します。
memcached からリストを解析し、PrintDebugString() で印刷するときに得られる結果は次のとおりです。
key {
key: "REPL:http://a.host.com/replica"
}
bkey {
10: "PL:http://a.host.com/replica"
}
したがって、2 つのリストが作成されますが、2 番目の要素が正しく読み取られません。
それは可能であるべきですか?Protobuf エンコーディングのドキュメントから、繰り返されるフィールドが別のフィールドに続く必要がないことを理解しているため、他のタイプのフィールドをインターリーブできるはずです。
/編集: リスト内の 1 つのタイプの要素 (SerialKey) のみで同じ問題が発生します。ここでは、SerialKey の追加の属性を使用して、ブラックリストに含まれているかどうかを判断します。原文:
message SerialKeyList {
repeated SerialKey key = 1;
}
message SerialKey {
required string key = 1;
required bool white = 2 [default = true];
}