我在spring boot项目中使用了嵌入式hazelcast 4.0.1来管理项目的缓存。我设置了Near Cache,还设置了脑裂保护功能,4.0之前叫Quorum。
然而,我发现了一个问题。比如我把缓存操作放在一个服务上:
@Cacheable(value ="CacheSpaceName", key ="#id")
public String findById(String id) {
...
}
如果Near Cache中已经缓存了正确的数据,即使裂脑保护生效,服务仍然会返回正确的结果,而不是被裂脑保护拒绝。
我怎样才能让近缓存也受到裂脑保护的控制?希望出现脑裂时,小集群不能正常运行,只有大集群才能正常运行。
以下是项目中近缓存配置和脑裂保护配置代码:
final NearCacheConfig nearCacheConfig = new NearCacheConfig()
.setInMemoryFormat(InMemoryFOrmat.OBJECT)
.setCacheLocalEntries(true)
.setMaxIdleSeconds(xxx);
MapConfig allMapConfig = new MapConfgi.setName("*").setNearCacheConfig(nearCacheConfig)
.setBackupCount(0).setMaxIndleSeconds(xxx).setInMemoryFormat(InMemoryFormat.OBJECT)
.setMergePolicyConfig(xxx)
final SplitBrainProtectionConfig splitBrainProtectionConfig = new SplitBrainProtectionConfig("name", true, 2);
splitBrainProtectionConfig.setProtectOn(SplitBrainProtectionOn.READ_WRITE);
allMapConfig.setSplitBrainProtectionName("name");
config.addSplitBrainProtectionConfig(splitBrainProtectionConfig);
config.addMapConfig(allMapConfig);