多年 CURD ,菜鸡全栈。
以前都写百十来人用的内部系统。
最近上了一个稍微有点并发的项目
发现用户注册即使后端验证了手机号是否已存在,还是一个手机注册了 N 条记录哈。
前端加了防抖,后端弄了 DB 事务,似乎没再发生。
经验丰富的小哥们,一般是怎么避免这种情况发生的。
前端所有提交按钮都加防抖? 后端做事务? 还有什么锁之类的,完全没用过。
展开说说?
![]() |
1
baobao1270 65 天前 via Android
csrf 应该可以吧
|
![]() |
2
dapang1221 65 天前
唯一键
|
![]() |
3
fcten 65 天前
并发不高靠数据库事务就够了。前端只影响用户体验,不可能依赖前端去保证数据一致性。
并发高再考虑分布式锁,因为数据库难以水平扩展。 |
4
fruitmonster 65 天前
数据库唯一,给它咔咔报错!实在不行缓存验证、数据库验证
|
![]() |
5
spicy777 65 天前 via iPhone
接口做幂等
|
6
yccyeng 65 天前
新增前加锁查询是否已存在 就是会慢
|
![]() |
7
swulling 65 天前
数据库事务难道不是必选么。
回到你这个场景,唯一也可以。 |
![]() |
8
Features 65 天前
1.锁
2.请求队列化 3.unique key |
![]() |
9
wqhui 65 天前
查询存不存在+注册入库加锁,多节点的话要用分布式锁
|
10
LuckyLauncher 65 天前
首先你提交按钮不加加载状态的?要是你接口慢一点用户还觉得没点到,那不就多点几次?
|
![]() |
11
bojackhorseman 65 天前
前端按钮加 loading ,弹窗提交容易多次点击的弹窗关闭之后再把 loading 设置 false
|
![]() |
12
potatowish 65 天前 via iPhone
INSERT INTO SELECT ... WHERE NOT EXISTS ...
Affected Rows: 成功 1 失败 0 |
13
Yukineko 65 天前
数据库 unique key 都没有的吗..
|
![]() |
14
Vegetable 65 天前
手机号唯一索引这么朴素的方案,是因为什么排除的呢
|
![]() |
15
joyhub2140 65 天前
不用多想,就是菜。。。
|
![]() |
16
tlerbao OP @joyhub2140 我不是自己认识到了吗?能说点有营养的吗?
|