大家是如何处理并发场景下的重复插入的?

这里的并发不不一定是经常讨论的那种高并发,可能是某个新建记录的接口被循环curl请求或者前端没有做防抖处理,用户点击太快,导致的数据库里插入了重复数据

数据库记录主键id自增

再额外给一个字段增加唯一索引,这样重复插入数据库会直接异常

有其他常用的方案么?

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
最佳答案

一般用 Cache 原子锁

$lock = Cache::lock('key', 60);
abort_if(!$lock->get(), 422, '操作过于频繁,请稍后再试!');

...

$lock->release();
6个月前 评论
lovecn 6个月前
yanthink (作者) 6个月前
yzbfeng (楼主) 6个月前
fpy5627 4个月前
讨论数量: 9

一般用 Cache 原子锁

$lock = Cache::lock('key', 60);
abort_if(!$lock->get(), 422, '操作过于频繁,请稍后再试!');

...

$lock->release();
6个月前 评论
lovecn 6个月前
yanthink (作者) 6个月前
yzbfeng (楼主) 6个月前
fpy5627 4个月前

一般用 Cache 原子锁

$lock = Cache::lock('key', 60);
abort_if(!$lock->get(), 422, '操作过于频繁,请稍后再试!');

...

$lock->release();
6个月前 评论
lovecn 6个月前
yanthink (作者) 6个月前
yzbfeng (楼主) 6个月前
fpy5627 4个月前

前端防抖加上呀,这个是主要的。

其他,后端如果有唯一索引问题可以在表单验证环节进行验证,而不是等数据库异常。

频繁请求可以可以进行 ttl 限流(默认频率对于表单提交来说还是不合适的)

6个月前 评论
yzbfeng (楼主) 6个月前
自由与温暖是遥不可及的梦想

laravel 不是 支持 验证码 唯一验证

6个月前 评论
一穷二白

一个用户只能一条吗?用 redis 集合,集合有唯一性的特点,把用户 id 扔集合里,扔失败,就证明已插过了,扔成功的,就是没插入过的。

6个月前 评论
yzbfeng (楼主) 6个月前
一穷二白 (作者) 6个月前
yzbfeng (楼主) 6个月前

分布式锁,悲观锁

6个月前 评论
Sinker 6个月前

获取前段提交的一个随机字段存起 如果存在就禁止提交

6个月前 评论

这个加表单令牌不就解决了?

4个月前 评论
xingchen

高并发高请求的业务来不急查询再添加
如果接口分布在多台机器又不能变量判断
我用的方法是建立一个唯一索引
然后插入用insert ignore

4个月前 评论

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!