Ignite Cache执行close+destroy后报“Cache已关闭”异常问题咨询
Ignite缓存销毁异常原因及正确操作方式
异常原因
cache.close()仅关闭当前节点的缓存本地实例,释放该节点上的缓存资源,但集群中缓存的元数据和其他节点的缓存实例仍然存在。- 调用
close()后,当前节点的缓存实例已处于失效状态,再调用cache.destroy()时,这个失效的实例无法发起集群级的销毁指令,因此抛出Cache has been closed异常。
为什么仅调用destroy()无异常
cache.destroy()是集群级操作,它内部会自动完成以下流程:
- 通知所有节点关闭各自的缓存实例
- 清理集群中的缓存元数据
- 彻底移除整个集群中的该缓存资源
不需要手动提前调用close(),Ignite已经在destroy()内部处理了节点级的关闭逻辑。
缓存是否彻底销毁的验证方式
调用destroy()后,可通过以下方式确认:
- 执行
ignite.cacheNames(),查看返回的缓存名称列表中是否还包含目标缓存 - 在集群其他节点上尝试获取该缓存,确认是否返回
null或抛出缓存不存在的异常
正确操作流程
直接调用cache.destroy()即可,无需先执行cache.close():
// 正确的缓存销毁操作 cache.destroy();
内容的提问来源于stack exchange,提问作者Rohan19
相关产品推荐
相关产品推荐

