java - 将 infinispan 缓存中的数据保存到文件

标签 java file caching persistence infinispan

我正在尝试将来自 infinispan 6.0.2 的缓存数据保存到一个文件中,我使用的是嵌入式模式,这是缓存配置:

ConfigurationBuilder builder = new ConfigurationBuilder();
builder.eviction().strategy(EvictionStrategy.LRU).maxEntries(1)
      .persistence()
      .passivation(false) // save evicted entries to cache store
      .addSingleFileStore()
         .preload(true)
         .shared(false)
         .fetchPersistentState(true)
         .ignoreModifications(false)
         .purgeOnStartup(false)
         .location(System.getProperty("java.io.tmpdir")+"infinispan")
         //.async().enabled(true).threadPoolSize(5)
         .singleton()
            .enabled(true)
            .pushStateWhenCoordinator(true)
            .pushStateTimeout(20000);
Configuration configuration = builder.build();

它对我不起作用(而且我没有错误),文件存储是在文件系统中创建的,但仅包含“FCS1”,如果它已经创建,则什么也不会发生(即没有更新)。 这是将键/值对添加到缓存的代码(没什么特别的):

// Avoid JMX problems related to org.infinispan already registered domain
GlobalConfiguration globalConf = new GlobalConfigurationBuilder()
                                        //.clusteredDefault()
                                        .globalJmxStatistics()
                                        .mBeanServerLookup(DummyMBeanServer.lookup)
                                        .build();
EmbeddedCacheManager manager1 = new DefaultCacheManager(globalConf, configuration);
manager1.start();
Cache<String, String> cache1 = manager1.getCache(); // default cache
cache1.put("key11", "val11");
cache1.put("key12", "val12");
cache1.put("key13", "val13");
cache1.evict("key11"); // a desperate attempt to move this key to the store
cache1.stop();
// when I restart the cache all data is lost
cache1.start();

最佳答案

当使用以下 XML 配置时(与上面几乎相同!)我可以在商店中找到我的条目:

<?xml version="1.0" encoding="UTF-8"?>
<infinispan xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="urn:infinispan:config:6.0 http://www.infinispan.org/schemas/infinispan-config-6.0.xsd"
  >

<!-- Using the cluster mode with grouping API-->

<global>
    <globalJmxStatistics enabled="false" />
</global>

<default>
    <!-- Enbaling eviction/expiration -->
    <eviction strategy="LRU" maxEntries="2000" />
    <expiration lifespan="1000" maxIdle="500" />
    <jmxStatistics enabled="false" />

    <clustering>
        <hash>
            <groups enabled="true" />
        </hash>
    </clustering>       
</default>

<namedCache name="CacheStore">
    <persistence passivation="false">
        <singleFile fetchPersistentState="true"
            ignoreModifications="false"
            purgeOnStartup="false" location="${java.io.tmpdir}">
            <async
                enabled="true"
                flushLockTimeout="15000"
                threadPoolSize="5" />
        </singleFile>
    </persistence>
</namedCache>

</infinispan>

关于java - 将 infinispan 缓存中的数据保存到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23239933/

相关文章:

java - Tomcat,内存泄漏 char[] 和 ThreadWithAttributes

c - 文件处理: unusual error reading file

PHP 文件上传,使用 FILES 超全局数组

java - 如何使用可用 RAM 在 Java 中有效地缓存对象?

caching - Sitecore 6.5 内容交付问题(发布/缓存?)

java - mvn执行:java fails with FileNotFoundException

java - 按 JPA 标准查询中的聚合字段过滤

java - JPanel 不调用自定义 LayoutManager 的 addLayoutComponent()

ios - 无法使用 [UIImage imageWithContentsOfFile :] and file is there 创建 UIImage

asp.net - 您对依赖于数据库的 ASP.NET 应用程序使用什么缓存策略?