6.16. 创建自定义缓存存储实现
您可以通过 Data Grid persistent SPI 创建自定义缓存存储。
6.16.1. 数据网格持久性 SPI
Data Grid Service Provider Interface (SPI)通过 NonBlockingStore
接口为外部存储启用读写操作,并具有以下功能:
- JCache 兼容供应商的可移植性
-
数据网格使用处理块代码的适配器,在
NonBlockingStore
和JSR-107
JCache 规范之间保持兼容性。 - 简化的事务集成
- 数据网格会自动处理锁定,因此您的实施不需要协调对持久性存储的并发访问。根据您使用的锁定模式,通常不会发生对同一密钥的并发写入。但是,您应该期望对持久存储上的操作源自多个线程,并创建实施来容许此行为。
- 并行迭代
- 数据网格允许您迭代带有多个线程的持久存储条目。
- 减少序列化,从而减少 CPU 用量
- 数据网格以序列化格式公开存储的条目,可远程传输。因此,Data Grid 不需要对从持久性存储检索的条目进行反序列化,然后在写入线时再次序列化。
6.16.2. 创建缓存存储
使用 NonBlockingStore
API 的实现创建自定义缓存存储。
流程
- 实施适当的数据网格持久的 SPI。
-
如果含有自定义配置,则使用
@ConfiguredBy
注释给存储类标注。 如果需要,创建自定义缓存存储配置和构建器。
-
扩展
AbstractStoreConfiguration
和AbstractStoreConfigurationBuilder
。 (可选)将以下注解添加到存储配置类中,以确保您的自定义配置构建器从 XML 解析您的缓存存储配置:
-
@ConfigurationFor
@BuiltBy
如果没有添加这些注解,则
CustomStoreConfigurationBuilder
会解析AbstractStoreConfiguration
中定义的常见存储属性,并且任何额外元素都会被忽略。注意如果配置没有声明
@ConfigurationFor
注释,当 Data Grid 初始化缓存时,会记录警告消息。
-
-
扩展
6.16.3. 自定义缓存存储配置示例
以下示例演示了如何使用自定义缓存存储实现配置 Data Grid:
XML
<distributed-cache> <persistence> <store class="org.infinispan.persistence.example.MyInMemoryStore" /> </persistence> </distributed-cache>
JSON
{ "distributed-cache": { "persistence" : { "store" : { "class" : "org.infinispan.persistence.example.MyInMemoryStore" } } } }
YAML
distributedCache: persistence: store: class: "org.infinispan.persistence.example.MyInMemoryStore"
ConfigurationBuilder
Configuration config = new ConfigurationBuilder() .persistence() .addStore(CustomStoreConfigurationBuilder.class) .build();
6.16.4. 部署自定义缓存存储
要将缓存存储实施用于 Data Grid Server,您必须为其提供 JAR 文件。
先决条件
如果数据网格服务器正在运行,停止该服务器。
数据网格仅在启动时加载 JAR 文件。
流程
- 在 JAR 文件中打包您的自定义缓存存储实施。
-
将您的 JAR 文件添加到 Data Grid Server 安装的
server/lib
目录中。