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

是否可以在Hazelcast中组合OutOfMemoryHandler和MapStore,hazelcast,Hazelcast,我知道,通过MapStore接口的实现,可以将Hazelcast地图上的每个条目存储到备份数据存储中,但在我们的应用程序中,我们不希望这样,我们只希望在应用程序运行时有脱离内存异常的危险,它使用LRU原则逐出内存中一定百分比的数据,但在逐出过程中,它将逐出的条目存储到数据存储中,如果再次询问entry key,则再次加载它们 我知道OutOfMemoryHandler接口用于管理OutOfMemory情况,存在%25逐出策略,也存在MapStore 我不知道的是,我能把它们全部结合起来吗 谢谢你

我知道,通过MapStore接口的实现,可以将Hazelcast地图上的每个条目存储到备份数据存储中,但在我们的应用程序中,我们不希望这样,我们只希望在应用程序运行时有脱离内存异常的危险,它使用LRU原则逐出内存中一定百分比的数据,但在逐出过程中,它将逐出的条目存储到数据存储中,如果再次询问entry key,则再次加载它们

我知道OutOfMemoryHandler接口用于管理OutOfMemory情况,存在%25逐出策略,也存在MapStore

我不知道的是,我能把它们全部结合起来吗

谢谢你的回答

您可以使用IMap.putTransient将条目放入IMap中,但不能触发MapStore.store IMap.Receive或auto Receive不会触发MapStore删除,即它只会从IMap中删除。
但是,我不建议使用这种方法,因为一旦jvm脱离MemoryError,它就会变得不稳定,因此应用这种业务逻辑是不可能的。此外,即使JVM抛出OutOfMemoryError,也可能不会调用OutOfMemoryHandler,因为该错误可能是从外部用户线程抛出的,Hazelcast可能不会被通知该错误。

好的,看起来,使用OutOfMemoryHandler并不明智,但我可以配置%25逐出策略,并使用EntryReceivedListener通过MapStore持久化逐出的条目,并在再次查询时加载这些条目。我问的原因是,假设我们在Hazelcast中将有1000000个条目我们不想通过MapStore保留所有这些条目我们的数据已经存储在其他地方,我们将填充Hazelcast,但我们不想再次编写代码重新加载从我们的存储中逐出的条目,相反,如果它们被逐出Hazelcast以存储这些内容,并且在再次请求时重新加载(仅针对200K)。您只能实现maploader方法以进行通读,而不能实现和mapstore方法,因此放入Hazelcast的条目不会持久化到DB。并使用自定义机制将逐出的条目保留回数据库。