【问题标题】:how to programmatically invoke infinispan cache loader如何以编程方式调用 infinispan 缓存加载器
【发布时间】:2015-07-02 22:51:54
【问题描述】:

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

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

【问题讨论】:

    标签: java caching infinispan


    【解决方案1】:

    缓存加载器/写入器是在启动时创建的,无法即时添加它。但是,您可以:

    a) 创建新的缓存并将缓存加载器放入编程配置中;那么你只需调用cache.entrySet() 甚至更好的cache.getAdvancedCache().filterEntries() 并读取缓存内容,包括存储中的数据,并将它们提供给目标缓存。您可能应该在加载过程中以某种方式清除缓存,以免文件太大时耗尽内存。

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

    c) 看代码看格式——其实很简单,文件开头4个magic字节,入口大小(4字节),键长(4字节),数据长度(4字节),标头中的元数据长度(4 个字节)和过期时间戳(8 个字节),然后是密钥、数据和元数据。使用VersionAwareMarshaller 将对象编组为字节并返回。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2012-09-19
        • 2021-10-26
        • 1970-01-01
        • 2018-12-21
        • 2012-01-08
        • 2011-12-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多