Hazelcast IMap.values和IMap.valuesPredicate给出不一致的值

问题描述

我有一个非常简单的要求来获取存储在IMap中的所有值。我在同一盒子上有一个服务器和一个客户端(没有群集,只有一个服务器实例和一个客户端实例)。

服务器启动:

Config config = new Config();
NetworkConfig network = config.getNetworkConfig();
JoinConfig join = network.getJoin();
join.getMulticastConfig().setEnabled( false );
join.getTcpIpConfig().setEnabled( false );
join.getAwsConfig().setEnabled(false);
HazelcastInstance instance = Hazelcast.newHazelcastInstance(config); 

客户端启动:

    ClientConfig clientConfig = new ClientConfig();
    clientConfig.getNetworkConfig().addAddress("127.0.0.1");
    HazelcastClient hazelIns = HazelcastClient.newHazelcastClient(clientConfig);
    IMap<String,DeviceStatus> map = hazelIns.getMap("map");

查询:

class DeviceStatus{
String name;
String status;
DeviceStatus(String name,String status){
    this.name=name;
    this.status= status;
}

// PUT ALL OBJECTS

for(int i =0;i<1000;i++){
    DeviceStatus status = new DeviceStatus("Device"+i,"UP");
    map.put(status.getName(),status);
}

for(int i=0; i< 10000; i++){
    List<DeviceStatus> list = (List<DeviceStatus>)hazelIns.getMap("map").values();
    if(list.size() != 1000){
        System.out.println("ALL SIZE "+ list.size());
    }
    String sql = "name ilike %D%";
    List<DeviceStatus> list1 = hazelIns.getMap("map").values( new SqlPredicate( sql ));
    if(list1.size() != 1000){
        System.out.println("SQL SIZE "+ list1.size());
    }
    Thread.sleep(1000);
}

Hazelcast版本:

<dependency>
    <groupId>com.hazelcast</groupId>
    <artifactId>hazelcast</artifactId>
    <version>3.7.3</version>
</dependency>
<dependency>
    <groupId>com.hazelcast</groupId>
    <artifactId>hazelcast-client</artifactId>
    <version>3.7.3</version>
</dependency>

我得到的大小不匹配size()有时从1到1000,但是大多数时候我得到1000大小。没有近实时缓存。为什么SQL和总大小的结果集不一致?仅供参考,缓存键在后台更新,但从未删除。

任何指针都会有很大帮助!

已更新: 在单独的线程中进行后台更新:

run(){
for(int i=0; i < 10; i++){
        DeviceStatus status = new DeviceStatus("Device"+i,"DOWN");
        map.put(status.getName(),status);
}

谢谢, 巴韦什

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...