1.2. protobuf 缓存编码


协议缓冲器(Protobuf)是结构化数据的轻量级二进制介质类型。作为缓存编码,Protobuf 为您提供了 Hot Rod 和 REST 端点的不同编程语言中客户端应用之间的互操作性。

Data Grid 使用 ProtoStream 库将缓存编码为 Protobuf,使用 application/x-protostream 介质类型。

以下示例显示了描述 Person 对象的 Protobuf 消息:

message Person {
    optional int32 id = 1;
    optional string name = 2;
    optional string surname = 3;
    optional Address address = 4;
    repeated PhoneNumber phoneNumbers = 5;
    optional uint32 age = 6;
    enum Gender {
        MALE = 0;
        FEMALE = 1;
    }
}
Copy to Clipboard Toggle word wrap
注意

protobuf 不支持循环对象。使用 Java 序列化或 JBoss Marshalling 进行 marshall 环形对象。

互操作性

由于它是语言中立,Protobuf 编码意味着,Data Grid 可以处理 Java、C++、Clo、Python、Go 等编写的客户端应用程序的请求。

protobuf 还使不同远程端点(Hot Rod 或 REST 上的客户端)能够在同一数据上运行。由于它使用 REST API,因此您可以通过 Data Grid 控制台访问和使用 Protobuf-encoded 缓存。

注意

您不能将 Data Grid 控制台与 application/x-protostream 以外的任何二进制编码一起使用。

您应该始终使用带有 application/x-protostream 介质类型的 Protobuf 缓存编码来与任何红帽技术集成,因为它允许应用程序和服务之间的通信。

queries

Data Grid 需要缓存中的结构化数据表示,以实现快速可靠的查询。要使用 Ickle 查询语言搜索缓存,您可以注册描述对象的 Protobuf 模式。

自定义类型

网格包括 ProtoStream API 的实现,它带有对常用类型的原生支持,包括 StringInteger。如果要在缓存中存储自定义类型,请使用 ProtoStream marshalling 生成并注册带有 Data Grid 的序列化上下文,以便它可以编译您的对象。

1.2.1. 编码缓存作为 ProtoStream

将 Data Grid 配置为使用 ProtoStream 库将缓存条目存储为协议缓冲器(Protobuf)。

流程

  • 为键和值指定 application/x-protostream 介质类型。

声明

<distributed-cache>
   <encoding>
      <key media-type="application/x-protostream"/>
      <value media-type="application/x-protostream"/>
   </encoding>
</distributed-cache>
Copy to Clipboard Toggle word wrap

programmatic

//Create cache configuration that encodes keys and values as ProtoStream
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.clustering().cacheMode(CacheMode.DIST_SYNC)
       .encoding().key().mediaType("application/x-protostream")
       .encoding().value().mediaType("application/x-protostream");
Copy to Clipboard Toggle word wrap

另外,您也可以对键和值使用相同的编码:

声明

<encoding media-type="application/x-protostream"/>
Copy to Clipboard Toggle word wrap

programmatic

.encoding().mediaType("application/x-protostream");
Copy to Clipboard Toggle word wrap

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat