当前设置
我有两个应用程序在两台独立的机器上运行的实例。两个应用程序节点共享分布式缓存的Hazelcast配置。缓存适用于常规IMap<String, SomeSerializableValue>
。
问题
现在我有一个案例,其中可缓存值的计算是缓慢且昂贵的。我想确保仅在单个应用程序节点上计算给定键的值。如果另一个节点获取密钥的值但计算仍在进行中,则此节点应等待计算完成。
理想的解决方案是这样的:
IMap<String, CompletableFuture<SomeSerializableValue>>
但这种方法显然不起作用,因为CompletableFuture
不可序列化。
题
Hazelcast中有没有可以满足我要求的替代解决方案?
例如,咖啡因有AsyncLoadingCache的概念。但是,它没有分发。 Hazelcast可以缓存异步计算的值吗?
Offloadable Entry Processor会工作吗?
这允许您在侧面线程中对Map.Entry.Value
应用“长时间运行”更新。
更新正在运行时,读取调用将返回现有值。只有在更新计算完成后,写入才会变得可见。