代码之家  ›  专栏  ›  技术社区  ›  Janning Vygen

Infinispan 8-缓存。clear()-如何正确理解javadoc?

  •  1
  • Janning Vygen  · 技术社区  · 7 年前

    在infinispan 8.2.5中。最后,我有一个用例,我想从缓存中逐出/清除所有条目。我正在呼叫cache。清除()。Javadoc说:

    作废组织。英菲尼斯潘。隐藏物清除()

    从缓存中删除所有映射。

    注意:除非您能够 保证 不会同时运行其他调用 .

    如果缓存是事务性的,它将不会与 交易

    由映射中的:clear()指定

    这是否意味着“没有其他对cache.clear()的调用”?或者它是否意味着“根本没有对底层缓存的其他调用”?所以没有缓存。放置和缓存。是否同时获取?

    清除缓存(新数据即将进入)是一种常见的用例。我使用了错误的方法吗?是否有其他方法可以从infinispan缓存中逐出所有项目?

    编辑: 我正在无效模式下运行缓存。clear()操作是使所有节点中的所有条目无效,还是仅使本地节点中的所有条目无效?

    1 回复  |  直到 7 年前
        1
  •  5
  •   pruivo    7 年前

    这意味着“无法运行其他写入操作”。这个 clear() 可能会损坏并发写入操作(它可以应用于某些节点,但在另一个节点中丢失),因为它不会尝试获取任何锁定。

    如果您担心并发写入,可以使用 stream() 或者 iterator() . 例如:

    cache.keySet().stream().forEach(BasicCache::remove);
    

    for (Iterator<K> it = cache.keySet().iterator(); it.hasNext(); ) {
        it.next();
        it.remove();
    }
    

    应该做到这一点。