如何使用持久存储的Ehcache 3来进行后写缓存?

时间:2016-07-19 15:02:08

标签: caching ehcache persistent persistent-storage

我使用下面的代码使用Ehcache3设置持久缓存。

我想使用后写算法来尝试加速我的写入。但是,我没有找到代码示例或指南来执行此操作。官方ehcache文档缺乏 - 当我在他们的论坛上寻求帮助时,我收到的是“我们必须修复此文档!”我找到了许多如何使用不属于PersistentCacheManager类型的高速缓存的示例,这些高速缓存不适用于新的类类型。

有一些代码示例,最值得注意的是 ehcache write-behind behaviour 但我不确定使用哪种版本的Ehcache。

我有点卡在这里,在我看来,我不能成为第一个想写一个具有后写行为的持久存储的人。我发现“后写”的含义有些模糊。我想要做的是以块状模式而不是一次一个地写入磁盘。我希望这可以在替换现有数据时加快写入速度。

我可以想象,优化写入速度可能会导致HD上出现文件碎片等问题 - 文件中可能还有未使用的漏洞。我希望有预先构建的代码来解决这些问题。也许有这方面的选项,我可以使用额外的调整。

            PersistentCacheManager myCacheManager;
            myCacheManager = CacheManagerBuilder.newCacheManagerBuilder()
            .with(CacheManagerBuilder.persistence(this.filename))
            .withCache("myCache",
                    CacheConfigurationBuilder.newCacheConfigurationBuilder(
                            Long.class, long[].class,
                            ResourcePoolsBuilder.newResourcePoolsBuilder()
                                    .heap(100000, EntryUnit.ENTRIES)
                                    .offheap(1, MemoryUnit.GB)
                                    .disk(2000, MemoryUnit.GB, true)
                    )
            ).build(true);

1 个答案:

答案 0 :(得分:0)

正如mailing list上的回复 - 比您在此处指出的更广泛 - 后写PersistentCacheManager之间绝对没有关系。

  • write-behind 是缓存中直写模式的异步扩展。可以在网络上的不同位置找到说明,包括在Wikipedia上。您可以在仅堆缓存上启用write-behind。它需要磁盘层,并且不会以任何方式干扰数据如何写入缓存本身的磁盘。
  • 为了实现后写,首先需要通过配置CacheLoaderWriter来支持直写CacheManager将实现与任何行为的交互作为参考数据存储(数据库,ReST服务,......)

是的,正如承认的那样,可以在该主题上改进文档。 请注意,除了配置和实现的确切接口(结合Ehcache 2.x的读者和编写者)之外,高级文档化原则仍然有效。

所以要回到你对Ehcache发出的磁盘写入方式的困惑 - 这是一个实现细节,绝不会发生每个突变。请注意,Ehcache磁盘存储是崩溃证明,如果未正确关闭 demo_one ---------------------------------------- id | name | position | phone ---------------------------------------- 1 | Moby Dick | Whale | 1-403-651-4000 2 | Jaws | Shark | 1-403-651-4000 demo_two --------------------------------------------------- id | name | type | cell --------------------------------------------------- 1 | Son of Moby Dick | Whale | 1-403-651-4000 2 | Son of Jaws | Shark | 1-403-651-4000 数据,将在重新启动时转储。这不是转换键值存储中的缓存的功能!绝对不是耐用性保证。