第 1 章 配置缓存编码
了解如何使用不同的介质类型配置数据网格缓存,以及编码如何影响您可以使用 Data Grid 的方法。
1.1. 缓存编码
编码是由介质类型标识的格式,Data Grid 用来将条目(键/值对)存储在缓存中。
远程缓存
Data Grid Server 使用缓存配置中设置的编码将条目存储在远程缓存中。
热 Rod 和 REST 客户端包括一个媒体类型,以及他们向 Data Grid Server 发出的每个请求的媒体类型。为了处理具有不同介质类型的多个客户端,Data Grid Server 会将数据按需转换为缓存配置中设置的介质类型。
如果远程缓存没有任何编码配置,Data Grid 服务器将键和值存储为通用 字节[]
,而无需任何介质类型信息,这可能会导致在为客户端请求不同格式转换数据时导致意外结果。
使用 ProtoStream 编码
当客户端请求包含介质类型时,Data Grid Server 会返回一个错误,它无法转换为缓存配置中设置的介质类型。
如果要使用多个客户端,如 Data Grid Console 或 CLI、Hot Rod 或 REST,建议使用 application/x-protostream
介质类型配置缓存编码。ProtoStream 编码还允许您使用服务器端任务并在远程缓存上执行索引查询。
嵌入式缓存
默认情况下,Data Grid 将嵌入式缓存中的条目存储为 Plain Old Java 对象(POJO)。
对于集群嵌入的缓存,数据网格需要将所有 POJO 放入一个字节阵列,可在节点间复制,然后返回 POJO。这意味着,如果您没有配置另一个 marshaller,您必须确保 Data Grid 可以序列化带有 ProtoStream marshaller 的 POJO。
如果您在嵌入式缓存中存储 mutable POJO,您应该始终使用新的 POJO 实例更新值。例如,如果您将 HashMap
存储为键/值对,则 Data Grid 集群的其他成员不会看到对映射的任何本地修改。另外,如果 Data Grid 分离了对象同时更新 Map 实例,则可能会出现 ConcurrentModificationException
。