记一次多线程插入或者更新数据库表操作优化过程
背景:有个数百万的数据,需要尽快入库,使用了多线程处理,先查询数据库是否存在,存在则更新;否则插入;
问题:数据库相同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"); } }

浙公网安备 33010602011771号