Infinispan 8-cache.clear()-如何正确理解javadoc?
在infinispan 8.2.5.Final中,我有一个用例,我想从缓存中逐出/清除所有条目。我正在调用cache.clear()。Javadoc说: void org.infinispan.Cache.clear() 从缓存中删除所有映射 注意:除非您可以,否则决不能在生产中调用此函数 保证不会同时运行其他调用 如果缓存是事务性的,它将不会与 交易 由映射中的:clear()指定 这是否意味着“没有其他对cache.clear()的调用”?或者它是否意味着“根本没有对底层缓存的其他调用”?所以没有cache.put和cache.get并发 清除缓存(新数据即将进入)是常见的用例。我用错方法了吗?是否有其他方法从infinispan缓存中逐出所有项 编辑: 我正在无效模式下运行缓存。clear()操作是使所有节点中的所有条目无效,还是仅使本地节点中的所有条目无效 表示“无法运行其他写入操作”。Infinispan 8-cache.clear()-如何正确理解javadoc?,java,caching,infinispan,Java,Caching,Infinispan,在infinispan 8.2.5.Final中,我有一个用例,我想从缓存中逐出/清除所有条目。我正在调用cache.clear()。Javadoc说: void org.infinispan.Cache.clear() 从缓存中删除所有映射 注意:除非您可以,否则决不能在生产中调用此函数 保证不会同时运行其他调用 如果缓存是事务性的,它将不会与 交易 由映射中的:clear()指定 这是否意味着“没有其他对cache.clear()的调用”?或者它是否意味着“根本没有对底层缓存的其他调用”?所
clear()
可能会破坏并发写操作(它可以应用于某些节点,但在另一个节点中丢失),因为它不会尝试获取任何锁定
如果您担心并发写入,可以使用流()
或迭代器()。例如:
cache.keySet().stream().forEach(BasicCache::remove);
或
for(Iterator it=cache.keySet().Iterator();it.hasNext();){
it.next();
it.remove();
}
应该这样做。它意味着“不能运行其他写入操作”。clear()
可能会破坏并发写操作(它可以应用于某些节点,但在另一个节点中丢失),因为它不会尝试获取任何锁定
如果您担心并发写入,可以使用流()
或迭代器()。例如:
cache.keySet().stream().forEach(BasicCache::remove);
或
for(Iterator it=cache.keySet().Iterator();it.hasNext();){
it.next();
it.remove();
}
应该这样做。有实际问题吗?你有错误吗?没有错误,因为它还没有投入生产。有实际问题吗?您有错误吗?没有错误,因为它还没有投入生产。感谢您的帮助。正如您所说的“节点”:我正在失效模式下运行缓存。clear()操作是使所有节点中的所有条目无效还是仅使本地节点中的所有条目无效。(这也添加到了我的原始问题中)clear()适用于所有节点。您可以使用CACHE\u MODE\u LOCAL标志将其强制到本地节点。示例:cache.getAdvancedCache().withFlags(cache\u MODE\u LOCAL).clear()注意迭代器/流在所有节点中迭代。您可以使用相同的标志来迭代仅本地键。感谢您的深入了解。正如您所说的“节点”:我正在失效模式下运行缓存。clear()操作是使所有节点中的所有条目无效还是仅使本地节点中的所有条目无效。(这也添加到了我的原始问题中)clear()适用于所有节点。您可以使用CACHE\u MODE\u LOCAL标志将其强制到本地节点。示例:cache.getAdvancedCache().withFlags(cache\u MODE\u LOCAL).clear()注意迭代器/流在所有节点中迭代。您可以使用相同的标志来迭代仅本地键。