如何以编程方式调用infinispan缓存加载器

时间:2015-06-30 22:52:29

标签: java caching infinispan

我想设置一个缓存加载策略,以便infinispan缓存使用基于* .dat(由infinispan本身创建的内容)或人类可读的txt文件(通过手动导出缓存条目创建)的内容播种。系统属性。

如何以编程方式调用infinispan缓存加载器以从* .dat文件加载?我可以解析txt文件并从中加载缓存,但不知道如何使用dat文件为缓存设定种子。

2 个答案:

答案 0 :(得分:4)

缓存加载器/编写器是在启动时创建的,没有办法在运行时添加它。但是,您可以:

a)创建新缓存并将缓存加载器置于编程配置中;然后你只需要调用cache.entrySet()甚至更好cache.getAdvancedCache().filterEntries()并读取包含商店中数据的缓存内容,并将它们提供给目标缓存。您可能应该在加载过程中以某种方式清除缓存,以便在文件太大时不会运行内存。

b)仅创建缓存加载器类本身(SingleFileStore)并调用process()以读取所有条目。您可以找到如何在testsuite中实例化它的示例。

c)查看代码以查看格式 - 它实际上非常简单,文件开头有4个魔术字节,条目大小(4个字节),密钥长度(4个字节),数据长度(4个字节),标头中的元数据长度(4个字节)和到期时间戳(8个字节),后跟密钥,数据和元数据。使用VersionAwareMarshaller将对象编组为字节并返回。

答案 1 :(得分:2)

@Flavius是绝对正确的。缓存写入器和加载器在启动期间实例化。

您可以考虑实现自己的自定义缓存加载器并将其部署在Hotrod服务器上。最简单的方法是使用this archetypeHere您可能会找到实施细节。