首页 文章

Oracle Coherence快速完成空集群

提问于
浏览
0

我遇到了缓存集群的问题,以清空所有缓存数据存储 .

此群集有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 回答

  • 0

    它's strange it would take so long, though to be honest, it'是不寻常的叫 clear .

    您可以尝试使用NamedCache.destroyCacheFactory.destroy(NamedCache)销毁缓存 .

    唯一的问题是它会使可能存在于缓存的任何引用无效,这需要通过另一个调用CacheFactory.getCache重新获得 .

  • 2

    通常,像clear()这样的“批量操作”调用将作为批量操作一直传回支持映射,但是在某些时候(服务器代码内部的某个地方)将成为基于迭代的实现,因此每个可以针对任何已注册的规则,触发器,事件侦听器等评估正在删除的条目,以便可以准确捕获备份 . 换句话说,为了保证分布式环境中的“正确性”,它会减慢操作并迫使它作为一些有序的子操作序列发生 .

    导致这种情况发生的一些原因:

    • 您已为缓存配置了直读,直写和/或后写行为;

    • 您有近缓存和/或连续查询(这意味着听众);

    • 您有索引(需要在数据消失时更新);

    我会就如何加快这个问题提出一些建议 .

    更新(2014年7月14日) - 是的,事实证明这是一个已知问题(即它可以被优化),但为了保持“正确性”和向后兼容性,优化(这将是重大变化)已经延迟,而clear()仍在后端以迭代方式完成 .

相关问题