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