问题描述
我有一个非常简单的要求来获取存储在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 (将#修改为@)