美文网首页
后端(java,php等)出现重复插入问题解决方案

后端(java,php等)出现重复插入问题解决方案

作者: 时之令 | 来源:发表于2018-06-08 10:41 被阅读0次

在开发过程中,业务逻辑相插入一条数据,但是在有些情况下,会导致数据重复插入多条数据,例如:1,用户重复点击提交按钮导致多个请求插入多条数据(业务只希望插入一条数据)。2,用户提交后,重复刷新浏览器导致同一个提交请求发生多次,插入多条数据。3,用户在浏览器中回退的时候,到提交页面,会重逢提交数据等,很多种情况可能导致插入多条数据问题。那么如何解决呢?

如何解决用户重复提交等情况导致重复插入的问题?

前端控制:前端可以在用户第一次提交之后,将提交按钮置灰,让用户不能重复点击提交,这样可以通过前端排除用户在一个页面多次提交导致多个提交请求,但是前端的控制并不能做到最终的防止多次提交的问题,因为其他场景,如用接口工具调用后端的提交接口,这样也会导致重复提交的问题。

后端控制:前端控制并不可以完全避免后端的重复插入问题,所以要想最终避免重复插入问题,后端必需也要做控制。

  • 数据中存在唯一性约束字段或者组合唯一性约束字段
    如果插入的参数中有在表中的业务唯一性字段(如用户名或者身份证号等),可以在创建表的时候,在这些字段中加唯一性约束,这样当有多个插入请求的时候,只有一个请求会成功,这样就可以利用数据库的约束性,从根本上解决冲入插入的问题,当然,如果这些业务字段中没有也为唯一性字段,可以看看有没有组合唯一性约束字段(即在插入的字段中有两个或者两个以上的字段组合在一起在表中是唯一的,这样可以在数据库中添加组合唯一性索引)。

  • 结合第三方工具利用全局唯一性字段
    常用的是第三方缓冲工具如redis等缓冲工具,这里用第三方而没有用容器中的session,因为session在负载的时候,也行不能保证同一个用户的请求,落在同一个容器中,这样session验证就会失效,这是使用第三的原因,所有实例都从第三方获取验证信息,这样就可以避免上述的session问题。
    如何避免为代码如下
    1,利用全局唯一性(如token)字段,这个字段可以唯一性确定是同一个人,去redis中查询存不存在。
    2,如果存在,说明改用户已经完成一次提交,提示用户不能重复提交,文案可以根据自己的业务场景去描述。如果不存在,在redis中set一个值,key可以是这个唯一性字段,或者接口名称+唯一性字段。根据业务需求也可以给当前key设置一个失效时间,时间可以是这个接口的平均响应时间,然后进行数据库操作,插入数据。
    3,如果插入成功,用户不能插入新的数据,如果插入不成功再将上面的key删除,不过如果不是数据问题,一般都会成功插入数据库。

通过上述两种方式,基本可以解决重复插入的问题,如果有好的方案,请赐教,😄

相关文章

  • 后端(java,php等)出现重复插入问题解决方案

    在开发过程中,业务逻辑相插入一条数据,但是在有些情况下,会导致数据重复插入多条数据,例如:1,用户重复点击提交按钮...

  • PHP迁移Java执行SQL插入的坑

    PHP操作MySQL执行insert语句如果发现超长会截取,Java超长字段插入会执行失败。 解决方案:Java程...

  • SQL:insert加入Where条件

    很多业务,尤其多对多关联,插入中间关系表数据时,经常会出现重复插入的问题。常用的解决方案有: 插入前删除全部关联数...

  • 浅谈JDBC

    前言 我们知道,在进行后端开发的时候,既要精通PHP、Java(JSP)等语言,也要能熟练使用MySQL、SQL ...

  • Android/Java 设计模式

    设计模式:是指在软件开发中,经过验证的,用于解决在特定环境下、重复出现的、特定问题的解决方案。 Java 设计模式...

  • MySQL数据库访问性能优化

    MYSQL应该是最流行的WEB后端数据库。大量应用于PHP,Ruby,Python,Java 等Web语言开发项目...

  • WordPress升级/安装主题插件提示权限不足 输入 FTP

    解决方案:wp-config.php 中插入: define(“FS_METHOD”, “direct”);def...

  • node之初始搭建http服务器(二)

    一、使用 Node 构建 web 应用 PHP和java是后端的网站开发语言,PHP 和java开发出来的网站,可...

  • node知识入门

    了解: node是一门后端语言,相较于传统的后端语言PHP和JAVA,node更具有优势,成为后起之秀,PHP和J...

  • 单线程vs多线程

    程序语言界总是充斥着各种各样的鄙视链,有后端鄙视前端,c++鄙视java,java鄙视php,php鄙视javas...

网友评论

      本文标题:后端(java,php等)出现重复插入问题解决方案

      本文链接:https://www.haomeiwen.com/subject/nttnsftx.html