我遇到了缓存集群的问题,以清空所有缓存数据存储 .
此群集有89个缓存存储,持续时间超过40分钟,可以完全卸载数据 .
我正在使用这个功能:
public void deleteAll() {
try {
getCache().clear();
} catch (Exception e) {
log.error("Error unloading cache",getCache().getCacheName());
}
}
getCache方法检索CacheFactory的NamedCache .
public NamedCache getCache() {
if (cache == null) {
cache = com.tangosol.net.CacheFactory.getCache(this.idCacheFisica);
}
return cache;
}
有没有人找到任何其他方法来更快地做到这一点?
先感谢您,
2 回答
它's strange it would take so long, though to be honest, it'是不寻常的叫
clear
.您可以尝试使用NamedCache.destroy或CacheFactory.destroy(NamedCache)销毁缓存 .
唯一的问题是它会使可能存在于缓存的任何引用无效,这需要通过另一个调用CacheFactory.getCache重新获得 .
通常,像clear()这样的“批量操作”调用将作为批量操作一直传回支持映射,但是在某些时候(服务器代码内部的某个地方)将成为基于迭代的实现,因此每个可以针对任何已注册的规则,触发器,事件侦听器等评估正在删除的条目,以便可以准确捕获备份 . 换句话说,为了保证分布式环境中的“正确性”,它会减慢操作并迫使它作为一些有序的子操作序列发生 .
导致这种情况发生的一些原因:
您已为缓存配置了直读,直写和/或后写行为;
您有近缓存和/或连续查询(这意味着听众);
您有索引(需要在数据消失时更新);
等
我会就如何加快这个问题提出一些建议 .
更新(2014年7月14日) - 是的,事实证明这是一个已知问题(即它可以被优化),但为了保持“正确性”和向后兼容性,优化(这将是重大变化)已经延迟,而clear()仍在后端以迭代方式完成 .