学习是件开心事

一次并发导致的死锁

并发批量保存数据,数据的顺序不一致会导致死锁。
新上线一个功能,大致是先从数据库里批量查询一堆数据,如果数据库里没有的数据,再批量从第三方获取,获取到后发送消息把数据异步保存到数据里。这没有什么技术含量的活,以为是一次轻松愉快的上线,结果第二天用户使用后,后台一堆duplicateKey和deadlock。经由日志发现页面都是同一时间多次调用该接口,也就是说每次刷新页面都是一次并发。所以这也就解释了duplicatekey,但是无法解释deadlock。后来在经理的研究下发现虽然是并发的调用接口,但是每次调用接口的传参顺序不一样,导致了保存数据前收到的数据集合顺序也不一样。