内存库与数据同步(2)

public class DataSynchroMain {
 public static void main(String[] args) throws IOException, ParseException {
    SystemInit.init(DataSynchroMain.class);
    SysMessageOutPut soutput=new SysMessageOutPut(false);
    soutput.outInfo("数据同步程序已启动");
    soutput.writeHeartTime();
    String jsonpath=DirAndFile.combinePath(SystemInit.jarCurDir, "O_ecthin_forecast.json");
    GeneralService gs=new GeneralService();
    List<DateEntity> l = gs.GetJsonList(jsonpath);
    List<Long> filelist=new ArrayList<Long>();
    List<Long> keylist=new ArrayList<Long>();

    //数据同步时判断变量
    int filecount=0;
    int keycount=0;

    for (int i = 0; i < l.size(); i++) {
        File file=new File(l.get(i).getFileath());
        if(file.exists()) {
            filecount++;
        }
        if(RedisClientHelper.existsKey(l.get(i).getKey())){
            keycount++;
        }
    if (RedisClientHelper.existsKey(l.get(i).getKey()) & file.exists()) {
            //内存库和文件数据都存在,比较修改时间    
        if(file.length()<=0) {
            continue;
        }
        String dtime=RedisClientHelper.getjedis_DataTime(l.get(i).getKey());
            if("".equals(dtime) || dtime==null) {
                continue;
            }
            SimpleDateFormat fm=new SimpleDateFormat("yyyyMMddHHmmss");

            Date d=fm.parse(dtime);

            long keytime=d.getTime();
            long filetime=file.lastModified();  //秒
            filelist.add(filetime);
            keylist.add(keytime);
        }
        }
    if(filecount<=0 & keycount<=0) {
        soutput.outInfo("内存库和文件都没有匹配数据,无法进行数据同步");

    }else if(filecount>0 & keycount<=0) {
        soutput.outInfo("内存库没有键值对,执行将文件导入内存库");
        DataWriteService dws=new DataWriteService();
        dws.DateWrite(jsonpath, false);

    }else if(filecount<=0 & keycount>0) {
        soutput.outInfo("文件不存在,执行将内存库数据导出至文件");
        DataReadService drs=new DataReadService();
        drs.DateRead(jsonpath, false);
        soutput.outInfo("读取完成");

    }else {
        soutput.outInfo("内存库和文件数据匹配,通过判断修改时间来进行数据同步");
    //取储存时间的俩个list的最大值相比来判断哪里的数据发生了变化   
    if(Collections.max(keylist)<Collections.max(filelist)) {  //说明文件有数据发生了变化;导write
        soutput.outInfo("文件有数据发生了变化,将文件数据导入内存库");
        DataWriteService dws=new DataWriteService();
        dws.DateWrite(jsonpath, false);

    }else if(Collections.max(keylist)>Collections.max(filelist)){  //内存库数据变化了,导read
        soutput.outInfo("内存库数据发生变化,正在将内存库数据读取至文件");
        DataReadService drs=new DataReadService();
        drs.DateRead(jsonpath, false);

    }

    }
    soutput.outInfo("程序结束");
}
}

备注:1.string判断为空要严谨,”“.equals()和==null同时用;
2.collection接口提供方法,可以取list里的最大值和最小值:Collections.max(list),Collections.min(ist);
3.数据同步仅通过修改时间来判断不够严谨,还要加上数据值得判断,相同时不进行同步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值