单个用户多次点击事件 会出现并发请求吗

$signRecord = SignRecord::where(['user_id'=>Auth::id(),'date_month'=>now()->format('Y-m')])->first();
if(!$signRecord){
    SignRecord::create([
    'user_id'=>Auth::id(),
    'date_month'=>now()->format('Y-m')
    ]);
}

用户多次点击事件 会出现并发请求吗

前端是 vue click 提交签到 然后出现了重复数据 数据库没有设置联合唯一索引

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 8

会,如果用户一直点击(前端没加限制 异步)。

在判断是否存在的时候,也会有其他请求进来的。

应该用数据库 unique

(我之前的项目,因为用了 unqiue , 不然就 死翘翘 了)

4年前 评论

前端做限制,后端加把锁,数据库用唯一索引

4年前 评论

前端一般是给按钮加个 disabled 当作 loading 的

4年前 评论
自由与温暖是遥不可及的梦想

这种东西不要相信前端,最好还是数据库做好 unqiue 不然容易死

4年前 评论

最好能通过你所做的实际环境进行一下分析,后端进行一下数据筛选。

例如这个环境下,你可以通过队列形式来进行避免,让用户点击的事件推入消费队列中,然后再一个一个拿出来进行处理。如果只通过前端来发起请求的话,建议在前端按钮出加一个 loading,或者去抖,这样可以保证当前用户在当前窗口中的短时间内只发起一次。

4年前 评论

加唯一索引有局限,除非绝对不可重复的字段。一般用 redis 锁,key 可以组合登陆用户 id。

4年前 评论

会,懒一点直接让前端做防抖,节流,loading 后端加唯一索引可以,但是只能防止新增 最好是对资源加锁,需要做好超时释放以及复杂业务锁自动续期问题

4年前 评论

可以加一个 标识 isClick false 是标识不可以提交 true 是标识可提交 当点击提交时 isClick = true 再点击时返回 return 就可以实现了 下面是 uniapp 的示例

代码已被折叠,点此展开

第一次点击

file

再次点击时

file

这是知识前端例子

后端要判断他是不是已经签到了

没有 -> 签到 -> 返回签到成功

有 -> 返回已签到

4年前 评论