gpt4 book ai didi

java - JCS 1.3 关机后从磁盘刷新缓存

转载 作者:行者123 更新时间:2023-12-02 09:19:23 24 4
gpt4 key购买 nike

我正在尝试使用 JCS 1.3 创建永久磁盘缓存。我希望缓存能够关闭,然后在下次使用时从磁盘重新加载。我有很多数据要从需要很长时间才能运行的数据库中填充,如果缓存只是从磁盘重新加载,速度会快得多。我尝试阅读 JCS 文档并使用他们的配置示例来开始,但到目前为止还没有成功。这是我正在使用的配置

##############################################################
##### Default Region Configuration
jcs.default=DC
jcs.default.cacheattributes=org.apache.jcs.engine.CompositeCacheAttributes
jcs.default.cacheattributes.MaxObjects=100
jcs.default.cacheattributes.MemoryCacheName=org.apache.jcs.engine.memory.lru.LRUMemoryCache
jcs.default.cacheattributes.DiskUsagePatternName=UPDATE

##############################################################
##### CACHE REGIONS
jcs.region.myRegion1=DC
jcs.region.myRegion1.cacheattributes=org.apache.jcs.engine.CompositeCacheAttributes
jcs.region.myRegion1.cacheattributes.MaxObjects=1000
jcs.region.myRegion1.cacheattributes.DiskUsagePatternName=UPDATE
jcs.region.myRegion1.cacheattributes.MemoryCacheName=org.apache.jcs.engine.memory.lru.LRUMemoryCache
jcs.region.myRegion1.elementattributes.IsEternal=true

##############################################################
##### AUXILIARY CACHES
# Indexed Disk Cache
jcs.auxiliary.DC=org.apache.jcs.auxiliary.disk.indexed.IndexedDiskCacheFactory
jcs.auxiliary.DC.attributes=org.apache.jcs.auxiliary.disk.indexed.IndexedDiskCacheAttributes
jcs.auxiliary.DC.attributes.DiskPath=f:/eh cache
jcs.auxiliary.DC.attributes.MaxPurgatorySize=10000
jcs.auxiliary.DC.attributes.MaxKeySize=10000
jcs.auxiliary.DC.attributes.OptimizeAtRemoveCount=300000
jcs.auxiliary.DC.attributes.OptimizeOnShutdown=true
jcs.auxiliary.DC.attributes.MaxRecycleBinSize=7500

这是我正在运行的一个非常简单的测试,以确保我的配置正确。

JCS 缓存 = JCS.getInstance("myRegion1"); cache.put("key", "我的值");

 System.out.println("Value In Cache After Put [" + cache.get("key") + "]");

Thread.sleep(5000);

CompositeCacheManager.getInstance().shutDown();
cache = JCS.getInstance("myRegion1");
System.out.println("Value In Cache After Reload [" + cache.get("key") + "]");

这是我在输出中得到的内容:

Value In Cache After Put [my value]
Value In Cache After Reload [null]

有人能够为我指出正确的方向吗?不确定这是否是我的配置中的问题,或者是否需要在代码中完成一些操作来告诉它从磁盘刷新。

最佳答案

我知道这个问题已经很老了,并且原始发布者已经找到了替代方案,但无论如何,这些都是我在解决相同问题后的发现。

CompositeCacheManager.getInstance()

CompositeCacheManager 保持为单例。该实例不准备在关闭后“重新启动”,因为有些对象仅在其构造函数中加载。并且单例实例永远不会被清除或重新分配。

关闭后,CompositeCacheManager 实例仍然能够创建缓存对象,但它们不能完全运行:它们可以工作,使用基本的基于内存的缓存,但所有辅助资源(例如因为文件系统存储)永远不会再次创建。

对我来说,它看起来像是一个损坏的实现,但我不确定这种行为是设计使然还是错误的结果。

解决方法

如果您遇到需要取消部署/部署缓存的情况,则必须跳过 getInstance() 方法并管理您自己的 CompositeCacheManager 实例。

由于 protected 构造函数+ protected initialize()方法,无法直接实例化它。创建一个子类以公开这些元素,并创建一个模仿 CompositeCacheManager.getInstance() 行为的工厂方法,但不包含保留永久单个引用的部分。

关于java - JCS 1.3 关机后从磁盘刷新缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28720584/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com