CURD 老头上线了一个稍微有点并发的项目连重复提交都没封住。

2024-07-04 11:37:40 +08:00
 tlerbao

多年 CURD ,菜鸡全栈。

以前都写百十来人用的内部系统。

最近上了一个稍微有点并发的项目

发现用户注册即使后端验证了手机号是否已存在,还是一个手机注册了 N 条记录哈。

然后

前端加了防抖,后端弄了 DB 事务,似乎没再发生。

咱就是说

经验丰富的小哥们,一般是怎么避免这种情况发生的。

前端所有提交按钮都加防抖? 后端做事务? 还有什么锁之类的,完全没用过。

展开说说?

1951 次点击
所在节点    问与答
16 条回复
baobao1270
2024-07-04 11:42:30 +08:00
csrf 应该可以吧
dapang1221
2024-07-04 11:44:57 +08:00
唯一键
fcten
2024-07-04 11:50:29 +08:00
并发不高靠数据库事务就够了。前端只影响用户体验,不可能依赖前端去保证数据一致性。
并发高再考虑分布式锁,因为数据库难以水平扩展。
fruitmonster
2024-07-04 11:53:56 +08:00
数据库唯一,给它咔咔报错!实在不行缓存验证、数据库验证
spicy777
2024-07-04 12:30:55 +08:00
接口做幂等
nullxx
2024-07-04 13:24:52 +08:00
新增前加锁查询是否已存在 就是会慢
swulling
2024-07-04 13:29:25 +08:00
数据库事务难道不是必选么。

回到你这个场景,唯一也可以。
Features
2024-07-04 13:33:47 +08:00
1.锁
2.请求队列化
3.unique key
wqhui
2024-07-04 13:35:52 +08:00
查询存不存在+注册入库加锁,多节点的话要用分布式锁
LuckyLauncher
2024-07-04 13:40:46 +08:00
首先你提交按钮不加加载状态的?要是你接口慢一点用户还觉得没点到,那不就多点几次?
bojackhorseman
2024-07-04 13:53:42 +08:00
前端按钮加 loading ,弹窗提交容易多次点击的弹窗关闭之后再把 loading 设置 false
potatowish
2024-07-04 13:54:39 +08:00
INSERT INTO SELECT ... WHERE NOT EXISTS ...
Affected Rows: 成功 1 失败 0
Yukineko
2024-07-04 14:01:57 +08:00
数据库 unique key 都没有的吗..
Vegetable
2024-07-04 14:03:38 +08:00
手机号唯一索引这么朴素的方案,是因为什么排除的呢
joyhub2140
2024-07-04 14:41:29 +08:00
不用多想,就是菜。。。
tlerbao
2024-07-05 21:49:05 +08:00
@joyhub2140 我不是自己认识到了吗?能说点有营养的吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1054760

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX