在laravel中遇到并发的解决方案

1,在mysql中创建唯一索引,在代码中try catch mysql的1062错误

2、将存在并发的代码丢给队列异步处理。这种解决方案的问题是,接下来的代码不能依赖队列的处理结果

3、使用mysql的锁,调用laravel的sharedLock、lockForUpdate。这两个方法需要放在laravel的transaction中,否则不会起作用

当存在并发请求时,在用jmeter测试发现sharedLock有死锁的问题, 而lockForUpdate不会。目前还不知道原因

关于sharedLock、lockForUpdate的详解参见:

https://www.sunzhongwei.com/using-laravel-sharedlock-and-lockforupdate-for-table-row-locks

作者:冯亮
         
能力有限,水平一般。如有错误,欢迎指正
原文地址:https://www.cnblogs.com/fengliang/p/11983647.html