是否可以在Hazelcast中组合OutOfMemoryHandler和MapStore

时间:2019-01-30 10:28:24

标签: hazelcast

我知道可以通过MapStore接口的实现将Hazelcast上的地图上的每个条目存储到支持DataStore的位置,但是在我们的应用程序中,我们不希望这样做,我们只希望如果我们的应用程序运行时会出现OutOfMemory的危险例外,它逐出内存中一定百分比的数据(采用LRU原理),但是在逐出期间,它将逐出的条目存储到数据存储中,如果再次询问输入键,则会再次加载它们。

我知道存在OutOfMemoryHandler接口来管理OutOfMemory情况,%25驱逐策略存在并且MapStore也存在。

我不知道可以将它们全部合并吗?

寻求答案...

1 个答案:

答案 0 :(得分:0)

  • 您可以使用IMap.putTransient()将条目放入IMap,但不触发MapStore.store()
  • IMap.evict()(或自动逐出)不会触发MapStore的删除,即只会从IMap中删除。

但是,我不建议使用这种方法,因为一旦jvm获得OutOfMemoryError,它就会变得不稳定,因此无法应用这种业务逻辑。即使JVM抛出OutOfMemoryHandler,也可能不会调用OutOfMemoryError,因为该错误可能是从外部(用户)线程抛出的,并且可能不会通知Hazelcast。