记一次多线程插入或者更新数据库表操作优化过程

背景:有个数百万的数据,需要尽快入库,使用了多线程处理,先查询数据库是否存在,存在则更新;否则插入;

问题:数据库相同key的数据,有时候插入多条。

解决办法:

 

String lockKey =getLockKey(t); //根据md5算法,将多个列,生成一个md5Value

synchronized(lockKey.intern()){
    Object value = redisUtil.hget(“Test111Md5Value”,lockKey);
    if(value != null){
       log.info("开始更新...");
       test111Mapper.updateTest111(t);
    }else{
        log.info("开始插入...");
       test111Mapper.insertTest111(t);
       redisUtil.hset("Test111Md5Value",lockKey,"1");

    }

}

 

posted @ 2025-11-14 14:46  技术虫  阅读(3)  评论(0)    收藏  举报