JCS缓存-不删除特定元素的删除功能
我们应用程序的jcs Cache配置如下所示,我看到当我们使用fulshAll()方法时,它会删除整个缓存,但当我们使用remove(键)时,它不会删除该对象。有没有人能建议。
public static void init( java.util.Properties properties ) {
java.util.Properties cacheProperties = new java.util.Properties();
java.util.regex.Pattern cachePattern =
java.util.regex.Pattern.compile("^jcs.*");
for (String key:properties.stringPropertyNames()) {
Matcher cacheMatcher = cachePattern.matcher(key);
if ( cacheMatcher.find() ) {
cacheProperties.setProperty(key,properties.getProperty(key));
}
}
CompositeCacheManager ccm =
CompositeCacheManager.getUnconfiguredInstance();
ccm.configure(cacheProperties);
miscCacheAdministrator = JCS.getInstance("miscCache");
metaDataCacheAdministrator = JCS.getInstance("metaDataCache");
resultCacheAdministrator = JCS.getInstance("resultCache");
}我在缓存中放置了一个元素,并将其移除以用于演示。
public static void ExampleCache(String key){
resultCacheAdministrator.put(key, "Temp Cache");
resultCacheAdministrator.remove(key);
logger.debug(" Flushing a Particular Cache "+key);
}当PUT被调用时,我看到对象是用1kb存储的,我立即用相同的键调用remove,只是为了测试,我看到对象仍然在那里,并且没有从缓存中删除,我原以为1kb是0,请告诉我我做错了什么,为什么缓存对象没有从文件缓存中删除。

属性文件
# cache settings
jcs.region.resultCache=DC
jcs.region.resultCache.cacheattributes.MaxObjects=0
jcs.region.resultCache.elementattributes.IsEternal=false
jcs.region.resultCache.elementattributes.MaxLife=14400
jcs.region.resultCache.elementattributes.IsSpool=true
jcs.region.resultCache.cacheattributes=org.apache.commons.jcs.engine.
CompositeCacheAttributes
# Disk Cache Event Queue Pool
thread_pool.disk_cache_event_queue.useBoundary=false
thread_pool.disk_cache_event_queue.maximumPoolSize=3
thread_pool.disk_cache_event_queue.minimumPoolSize=1
thread_pool.disk_cache_event_queue.keepAliveTime=3500
thread_pool.disk_cache_event_queue.startUpSize=1发布于 2017-11-01 03:36:49
从提供的信息来看,没有事实证明磁盘文件会收缩。
简短的回答是:
从所给出的配置中,您可能希望通过设置
jcs.region.resultCache.cacheattributes.OptimizeAtRemoveCount=1顺便说一句,看一下代码,你可能会意识到,为了在运行时进行优化,该属性的值必须为> 0。
更详细的解释:
当谈论磁盘文件时,我们谈论的是AbstractDiskCache类的实现。目前有三个子类:
BlockDiskCache,IndexedDiskCache,JDBCDiskCache。
BlockDiskCache没有展示任何用于管理结果文件大小的机制。protected list".JDBCDiskCache方法只记录为“将这些块添加到数据库中,这显然是将管理存储大小的任务委派给底层数据库系统。IndexedDiskCache。作为默认实现,它很可能在您的案例中使用。这个类展示了指示所需功能的optimizeFile()方法。在优化过程中,将压缩数据文件,并减小结果文件的大小。
当发生以下两种事件之一时,将触发此类优化:
有关OptimizeOnShutdown属性状态的文档:
默认情况下,如果空闲数据大小大于0,则索引磁盘缓存将在关机时进行优化。如果要防止此行为,可以将此参数设置为false。
默认情况下,该值为true。
经过多次删除后的
有关OptimizeAtRemoveCount属性状态的文档:
在多少次删除时,缓存应尝试对数据文件进行碎片整理。因为我们回收空位,所以通常不需要碎片整理。要防止缓存对数据文件进行碎片整理,可以将其设置为-1。这是默认值。
但是,您的属性不会显示要设置的OptimizeAtRemoveCount。因此,任何释放的项目都将被添加到空闲列表中以供重复使用,但磁盘文件大小不会减小。
从磁盘缓存的分布式实现来看,只有IndexedDiskCache提供了减小磁盘文件大小的功能。您需要正确配置优化功能才能利用它。目前,任何其他事情都需要恢复到编写自己的派生类。
另一个注意事项:
磁盘文件优化与炼狱逻辑完全不同。后者涉及从缓存本身中删除值。这样的删除可能会导致磁盘大小减小。
https://stackoverflow.com/questions/46986229
复制相似问题