请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

表单提交,数据库出现重复数据的问题

一哥您好,最近在工作中出现了前端表单提交因为网络延迟原因多点了几下确定按钮导致数据库中出现了重复数据
目前项目是单体应用,解决方式是通过 获取当前登陆用户的sessionid和请求接口路径名作为redis string类型的key
设置3秒过期时间来限制用户重复提交, 但是数据库中还是会出现重复数据
采用自定义注解标记在接口上面的方式
代码如下,麻烦一哥看下哈。

图片描述

正在回答

1回答

同学你好:

    你这里所说的单体应用,我个人猜测应该就是一个 SpringMVC 或 SpringBoot 工程,然后多实例部署的情况。解决这个问题,你可以去做这样的事:

    (1)前端一定要控制,这个不应该由后端去保证,例如,第一次点击之后,应该置灰,或者等待几秒可以再次点击;这是避免重复提交的首要手段;

    (2)使用 Redis 限制用于提交,我个人感觉并不好。这里可以直接使用 MySQL 去做(当这个接口的并发情况不高的时候),存储之前一定要先去做判断,另外,最好是给表加上一些唯一索引,这样,即使重复提交,存储的时候也会直接报错,不会导致后端数据出现问题;

    (3)最后,做好日志回溯,一定要有详细的日志记录插入数据的情况,以防止在真正出现问题的时候,能够做人工补偿。


    我是勤一,致力于将这门课程的问答区打造为 Java 知识体系知识库,Java 知识体系 BBS!共同建造、维护这门课程,我需要每一个你!

2 回复 有任何疑惑可以回复我~
  • 谢谢一哥,一哥您的解答总能解决我的问题,并给出实质性的落地方案,更加证明选择您的课程就是提升自身技术的最好选择!最后有一点就是一哥 我有点不明白redis是单线程的并且做了时间限制怎么还会出现这种问题
    回复 有任何疑惑可以回复我~ 2020-12-13 22:20:14
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信