如何以编程方式调用 infinispan 缓存加载器
how to programmatically invoke infinispan cache loader
我想设置一个缓存加载策略,使 infinispan 缓存的内容来自 *.dat(由 infinispan 本身创建的文件)或人类可读的 txt 文件(通过手动导出缓存条目创建)基于系统 属性.
如何以编程方式调用 infinispan 缓存加载程序以从 *.dat 文件加载?我可以解析 txt 文件并从中加载缓存,但不确定如何使用 dat 文件播种缓存。
缓存 loaders/writers 是在启动时创建的,无法即时添加。但是,您可以:
a) 创建新缓存并将缓存加载器置于编程配置中;那么你只需调用 cache.entrySet()
或更好的 cache.getAdvancedCache().filterEntries()
并读取缓存内容,包括存储中的数据,并将它们提供给目标缓存。您可能应该在加载期间以某种方式清除缓存,这样当文件太大时您就不会 运行 占用内存。
b) 仅创建缓存加载程序 class 本身 (SingleFileStore
) 并调用 process()
读取所有条目。您可以找到如何在测试套件中实例化它的示例。
c) 查看代码以查看格式 - 其实很简单,文件开头有 4 个魔术字节,条目大小(4 字节),密钥长度(4 字节),数据长度(4 字节) )、header 中的元数据长度(4 字节)和过期时间戳(8 字节),后跟密钥、数据和元数据。 Objects 使用 VersionAwareMarshaller
.
编组为字节并返回
@Flavius 完全正确。缓存编写器和加载器在启动期间实例化。
您可以考虑实现自己的自定义缓存加载器并将其部署在 Hotrod 服务器上。最简单的方法是使用 this archetype. Here 您可能会找到实现细节。
我想设置一个缓存加载策略,使 infinispan 缓存的内容来自 *.dat(由 infinispan 本身创建的文件)或人类可读的 txt 文件(通过手动导出缓存条目创建)基于系统 属性.
如何以编程方式调用 infinispan 缓存加载程序以从 *.dat 文件加载?我可以解析 txt 文件并从中加载缓存,但不确定如何使用 dat 文件播种缓存。
缓存 loaders/writers 是在启动时创建的,无法即时添加。但是,您可以:
a) 创建新缓存并将缓存加载器置于编程配置中;那么你只需调用 cache.entrySet()
或更好的 cache.getAdvancedCache().filterEntries()
并读取缓存内容,包括存储中的数据,并将它们提供给目标缓存。您可能应该在加载期间以某种方式清除缓存,这样当文件太大时您就不会 运行 占用内存。
b) 仅创建缓存加载程序 class 本身 (SingleFileStore
) 并调用 process()
读取所有条目。您可以找到如何在测试套件中实例化它的示例。
c) 查看代码以查看格式 - 其实很简单,文件开头有 4 个魔术字节,条目大小(4 字节),密钥长度(4 字节),数据长度(4 字节) )、header 中的元数据长度(4 字节)和过期时间戳(8 字节),后跟密钥、数据和元数据。 Objects 使用 VersionAwareMarshaller
.
@Flavius 完全正确。缓存编写器和加载器在启动期间实例化。
您可以考虑实现自己的自定义缓存加载器并将其部署在 Hotrod 服务器上。最简单的方法是使用 this archetype. Here 您可能会找到实现细节。