Heim >PHP-Framework >Laravel >Detaillierte Lösung: Verwenden Sie Laravel, um das Problem des Inventarüberlaufs zu lösen
Die folgende Tutorial-Kolumne von laravel stellt Ihnen verschiedene Lösungen vor, wie Sie mit Laravel einen Inventarüberlauf beheben können. Ich hoffe, dass es Freunden in Not hilfreich sein wird!
Datenbankfelder
2. Redis Atomic Lock
/** * 错误示范 * Create by Peter Yang * 2021-06-08 10:57:59 * @return string */ function test1() { //商品id $id = request()->input('id'); $product = Product::where('id', $id)->firstOrFail(); if ($product->num decrement('num'); return "success"; }Stock ist normal
package mainimport ( "fmt" "github.com/PeterYangs/tools/http" "sync")func main() { client := http.Client() wait := sync.WaitGroup{} for i := 0; i
Stock ist. normal
/** * redis原子锁 * Create by Peter Yang * 2021-06-08 11:00:31 */ function test2() { //商品id $id = request()->input('id'); $lock = \Cache::lock("product_" . $id, 10); try { //最多等待5秒,5秒后未获取到锁,则抛出异常 $lock->block(5); $product = Product::where('id', $id)->firstOrFail(); if ($product->num decrement('num'); return 'success'; }catch (LockTimeoutException $e) { return '当前人数过多'; } finally { optional($lock)->release(); } }
Der Lagerbestand ist normal
/** * mysql悲观锁 * Create by Peter Yang * 2021-06-08 11:00:47 */ function test3() { //商品id $id = request()->input('id'); try { \DB::beginTransaction(); $product = Product::where('id', $id)->lockForUpdate()->first(); if ($product->num decrement('num'); \DB::commit(); return "success"; } catch (\Exception $exception) { } }
Das obige ist der detaillierte Inhalt vonDetaillierte Lösung: Verwenden Sie Laravel, um das Problem des Inventarüberlaufs zu lösen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!