我遇到了缓存群集问题,无法清空所有缓存数据存储。
此群集有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;
}
有没有人找到其他方法更快地完成这项工作?
提前谢谢你,
答案 0 :(得分:2)
很奇怪,这需要很长时间,但说实话,致电clear
并不常见。
您可以尝试使用NamedCache.destroy或CacheFactory.destroy(NamedCache)销毁缓存。
唯一的问题是它会使缓存中可能存在的任何引用无效,这需要通过另一个CacheFactory.getCache调用来重新获取。
答案 1 :(得分:0)
通常,像clear()这样的“批量操作”调用将作为批量操作一直传回支持映射,但在某些时候(服务器代码中的某个地方)将成为基于迭代的实现,这样就可以针对任何已注册的规则,触发器,事件监听器等评估要删除的每个条目,从而可以准确捕获备份。换句话说,为了保证分布式环境中的“正确性”,它会减慢操作速度并迫使它作为一些有序的子操作序列发生。
发生这种情况的一些原因:
我会就如何提高速度提出一些建议。
更新(2014年7月14日) - 是的,事实证明这是一个已知问题(即它可以被优化),但是为了保持“正确性”和向后兼容性,优化(这将是重大变化) )已被推迟,而clear()仍在后端以迭代方式完成。