6.15. 创建自定义缓存存储实现
您可以通过 Data Grid 持久 SPI 创建自定义缓存存储。
6.15.1. Data Grid Persistence SPI
Data Grid Service Provider Interface (SPI)通过 NonBlockingStore
接口启用对外部存储的读写操作,具有以下特性:
- 简化事务集成
- Data Grid 会自动处理锁定,因此您的实施不需要协调对持久性存储的并发访问。根据您使用的锁定模式,通常不会发生对同一键的并发写入。但是,您应该预期持久存储的操作来自多个线程,并创建实现来容许此行为。
- 并行迭代
- 网格可让您并行迭代带有多个线程的持久性存储中的条目。
- 减少序列化结果,从而减少 CPU 用量
- 网格以序列化格式公开存储的条目,这些条目可以远程传输。因此,Data Grid 不需要反序列化条目,它从持久性存储检索,然后在写入线时再次序列化。
6.15.2. 创建缓存存储
使用 NonBlockingStore
API 的实现创建自定义缓存存储。
流程
- 实施适当的 Data Grid 持久 SPI。
-
如果有自定义配置,使用
@ConfiguredBy
注释给您的存储类添加注解。 如果需要,创建自定义缓存存储配置和构建器。
-
扩展
AbstractStoreConfiguration
和AbstractStoreConfigurationBuilder
。 (可选)在存储配置类中添加以下注解,以确保自定义配置构建器从 XML 解析您的缓存存储配置:
-
@ConfigurationFor
@BuiltBy
如果没有添加这些注解,则
CustomStoreConfigurationBuilder
会解析AbstractStoreConfiguration
中定义的通用存储属性,并且任何额外的元素都会被忽略。注意如果配置没有声明
@ConfigurationFor
注释,当 Data Grid 初始化缓存时,会记录警告消息。
-
-
扩展
6.15.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.15.4. 部署自定义缓存存储
要将缓存存储实现与 Data Grid Server 搭配使用,您必须为其提供 JAR 文件。
先决条件
如果 Data Grid Server 正在运行,则停止它。
Data Grid 仅在启动时加载 JAR 文件。
流程
- 将自定义缓存存储实施打包到 JAR 文件中。
-
将您的 JAR 文件添加到 Data Grid Server 安装的
server/lib
目录中。