firstOrCreate 会有并发问题
请教一下关于 firstOrCreate 会有并发问题,我发现这样的语句
$module->firstOrCreate([
'video_id' => $request->video_id,
'user_id' => $this->user()->id,
]);
最终出现了两条记录
关于 LearnKu
有唯一键吗
确实会有并发的问题,所以在存在并发可能的地方,最好分开写
加上lockForUpdate() 有用吗
遇到了,偶尔会多产生一条数据
这是编程本身的问题,高并发都要单独考虑一致性的。
@lovecn id 是唯一
@regforce
@linxb
那请教下分开写是怎么做,如何解决编程问题
@tradzero 有用的 开启事物是可以的,但是这样感觉很多插入和更新 都要开启事物?
'user_id' 'video_id' 如果逻辑上不会有两条一样的数据,可以建立联合唯一索引
有并发问题的话就在这条语句外层加一个 lock 呀。
了解一下
肯定会有并发问题, 加锁吧
那每次使用 firstOrCreate 都要加锁?
@农村闲散劳动力
@Max
不是這個方法的問題,是所有的編程都有這種問題。
覺得業務太大會併發做好對應的防併發就好,普通業務根本不用糾結這些
这肯定会有并发问题,这个根据你的业务来,跟这个方法本身是没关系的,你可以加锁解决
https://github.com/laravel/framework/issue...
这个issue有相关讨论,laravel相关的xxxxOrCreate都会有类似问题。
讨论里面有提供几种解决方法,主要思路就是操作之前加锁,或者操作失败之后做补偿