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

来源:3-10 lambda表达式不是什么地方都能写

weibo_拥有写轮眼的大帅B_0

2020-12-12

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

图片描述

写回答

1回答

张勤一

2020-12-13

同学你好:

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

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

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

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


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

2
1
weibo_拥有写轮眼的大帅B_0
谢谢一哥,一哥您的解答总能解决我的问题,并给出实质性的落地方案,更加证明选择您的课程就是提升自身技术的最好选择!最后有一点就是一哥 我有点不明白redis是单线程的并且做了时间限制怎么还会出现这种问题
2020-12-13
共1条回复

Java实操避坑指南 SpringBoot/MySQL/Redis错误详解

掌握业务开发中各种类型的坑,,Java web开发领域通用

452 学习 · 204 问题

查看课程