解决方案:如何防止数据重复插入?
目录 为啥要解决数据重复插入? 解决方案实战 可落地小总结 一、为啥要解决数据重复插入? 问题起源,微信小程序抽风 wx.request() 重复请求服务器提交数据。后端服务也很简单,伪代码如下: class SignLogService { public void saveSignLog(SignLogDO log) { // 简单插入做记录 SignLogDAO.insert(log); } } 发现数据库会存在重复数据行,提交时间一模一样。但业务需求是不能有多余的 log 出现,这明显是个问题。 问题是,重复请求导致的数据重复插入。这问题造成的后果很明显: 数据冗余,可能不单单多一条 有些业务需求不能有多余数据,造成服务问题 问题如图所示: 解决方式:如何将 同请求 A,不执行插入,而是读取前一个请求插入的数据并返回。解决后流程应该如下: 二、解决方案实战 1.单库单表解决方案 唯一索引 + 唯一字段 幂等 上面说的那种业务场景:sign_log 表会有 user_id、sign_id、sign_time 等。那么每次签到,每个人每天只有一条签到记录。 数据库层采取唯一索引的形式...