解决方案:如何防止数据重复插入?

  • 时间:
  • 浏览:0
  • 来源:大发快3_快3在线稳定计划_大发快3在线稳定计划

摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢!

目录

  1. 为甚要正确处理数据重复插入?
  2. 正确处理方案实战
  3. 可落地小总结

问題图片起源,微信小线程池抽风 wx.request() 重复请求服务器提交数据。后端服务也很简单,伪代码如下:

class SignLogService {
    public void saveSignLog(SignLogDO log) {
        

发现数据库会位于重复数据行,提交时间一模一样。但业务需求是只能有多余的 log 再次出现,这明显是个问題图片。

问題图片是,重复请求意味着着的数据重复插入。这问題图片造成的后果很明显:

  • 数据冗余,肯能不单单多四根
  • 但是业务需求只能有多余数据,造成服务问題图片

问題图片如图所示:

正确处理法子:如可将 同请求 A,不执行插入,但是读取前有有另另俩个请求插入的数据并返回。正确处理后流程应该如下:

1.单库单表正确处理方案

  • 唯一索引 + 唯一字段
  • 幂等

后边说的那种业务场景:sign_log 表会有 user_id、sign_id、sign_time 等。这样每次签到,各自 所有每天只能四根签到记录。

数据库层采取唯一索引的形式,保证数据记录唯一性。即 UNIQUE 约束,UNIQUE 约束唯一标识数据库表中的每条记录。另外,user_id,sign_id,sign_time 有有另另俩个组合适唯一字段。创表的伪代码如下:

CREATE TABLE sign_log
(
id int NOT NULL,
user_id int NOT NULL,
sign_id int,
sign_time int,
CONSTRAINT unique_sign_log UNIQUE (user_id,sign_id,sign_time)
)

重点是 CONSTRAINT unique_sign_log UNIQUE (user_id,sign_id,sign_time)。有个小问題图片,数据量大的以后,每条记录后会有对应的唯一索引,比较耗资源。这样原来 就行什么时间?

答案是不行,服务严重不足健壮。第有有另另俩个请求插入成功,第俩个请求直接报错,Java 服务会抛出 DuplicateKeyException 。

简单的幂等写法操作即可,伪代码如下:

class SignLogService {
    public SingLogDO saveSignLog(SignLogDO log) {
        

的确,流量全部都是很大,但是算很高并发。重复写问題图片,原来 正确处理即可。那大流量、高并发场景咋搞

2.分库分表正确处理方案

流量大了后,单库单表会演变成分库分表。这样基于单表的唯一索引形式,在碰到分表就无法保证呢,插入的地方肯能是有有另另俩个分表 A1 和 A2。

正确处理思路:将数据的唯一性条件放上去但是存储,并进行锁控制

还是后边的例子,每天,每次签到,各自 所有只能四根签到记录。这样使用分布式锁 Redis 的正确处理方案。大致伪代码如下:

a.加锁

  • lockKey 最简单的是 user_id + sign_id + sign_time
  • expireTime 设置为一天

b.解锁

c.幂等代码加强

class SignLogService {
    public SingLogDO saveSignLog(SignLogDO log) {

        

但是方案还是全部都是很性性心智心智成熟图片 图片 期期期 ,大伙参考下即可。

正确处理方案实战中,了解具体术。归纳如下:

  • 幂等:保证多次同意请求后结果一致
  • 并发控制:单表唯一索引、分布式多表分布式锁
  • 降级兜底方案:分布式锁锁失效 – 考虑乐观锁兜底

参考资料

  • 重复插入方案: http://www.bysocket.com/archives/2266
  • 《阿里巴巴 Java 开发手册》

以下专题教程是我不好您会有兴趣

  • 《Spring Boot 2.x 系列教程》
  • 《Java 核心系列教程》

(关注微信公众号,领取 Java 精选干货学习资料)

猜你喜欢

荣耀20 PRO发布官方拆机图赏

IT之家7月3日消息 今年5月31日,荣耀发布了荣耀20、荣耀20PRO系列旗舰手机,两款新机采用了6.26英寸魅眼屏,麒麟930避免器,支持GPUTurbo3.0。配色方面,

2020-01-21

RW非主流阵容被EDG打爆,司马老贼无奈露出珍藏的笑容

斗玩小编 来源:斗玩网 2018-07-0210:20:00

2020-01-20

尊宝 A102 HCS 5(6件套)图片,高清细节图

关于当我们当我们当我们 |广告服务|使用条款|联系当我们当我们当我们 北京盛拓优讯信息技术有限公司.版权所有中华人民共和国增值电信业务经营许可证编号:京B2-2017020

2020-01-20

设计模式之代理,手动实现动态代理,揭秘原理实现

前言开心一刻周末,带着女人不儿子并肩逛公园。儿子1个 人跑在前面,吧唧一下不小心摔了一跤,脑袋瓜子摔了个包,稀里哗啦的哭道:“爸爸,我会无需摔成傻子!”我指了指我背后的伤

2020-01-20

惊艳!福建竟藏着这么多建筑瑰宝…你知道几个?

老会 看到世界著名建筑而某些都有现代艺术品不如来欣赏一下咱大福建的古建筑,陶醉在古典中~我我实在咱大福建有福建有7大建筑的瑰宝,更是获得了“中国传统建筑文化旅游目的地”的金

2020-01-20