让我们说我正在使用分布式缓存模式来缓存称为“国家/地区”。我有三个节点。我在缓存中放了一些数据。我想知道此缓存的每个节点上存在的数据。如果有工具或我们如何知道它,请告诉我programaticaaly
答案 0 :(得分:2)
您可能会问几件事:
此服务的高可用性(HA)状态。的价值 MACHINE-SAFE意味着所有集群成员都在任何给定的上运行 计算机可以停止而不会丢失数据。 NODE-SAFE的价值 意味着可以停止任何集群成员而不会丢失数据。该 ENDANGERED的值表示任何群集的异常终止 运行此服务的成员可能会导致数据丢失。
如果您想知道密钥属于哪个分区,您可以获取缓存的服务(CacheService service = cache.getCacheService())并从中获取KeyPartitioningStrategy(KeyPartitioningStrategy strategy =((PartitionedService)服务) .getKeyPartitioningStrategy()),然后询问密钥所在的策略(int partition = strategy.getKeyPartition(key))。
如果你使用密钥亲和力来控制缓存数据位置,那显然比那更复杂;-) ..有关更多信息,请参阅JavaDoc for KeyPartitioningStrategy.getKeyPartition。
要确定分区所属的集群成员,您只需调用PartitionedService.getKeyOwner(Object oKey)
与上述所有内容相同的服务器端是BackingMapManagerContext.getKeyPartition(),并且还有一个方便的方法BackingMapManagerContext.isKeyOwned()。
现在,Coherence中非常酷的一点是,您通常不会担心数据所在的 ,因为所有操作都保证是一次性操作,并且只有在操作达到HA要求后才能看到结果。
为了充分披露,我在Oracle工作。本文中表达的观点和观点是我自己的,不一定反映我的雇主的意见或观点。