以下是一个使用Lumen框架实现的支持高并发的防止库存超卖的案例:\n\nphp\n// routes/web.php\n\n$router->post('/buy-product', 'ProductController@buyProduct');\n\n\nphp\n// app/Http/Controllers/ProductController.php\n\nnamespace App\Http\Controllers;\n\nuse Illuminate\Http\Request;\nuse Illuminate\Support\Facades\Redis;\n\nclass ProductController extends Controller\n{\n public function buyProduct(Request $request)\n {\n $productId = $request->input('product_id');\n $userId = $request->input('user_id');\n\n $stockKey = 'product:' . $productId . ':stock';\n\n // 使用 Redis 的 WATCH 命令监听库存键\n Redis::watch($stockKey);\n\n // 检查库存是否足够\n $stock = Redis::get($stockKey);\n if ($stock <= 0) {\n Redis::unwatch();\n return response()->json(['message' => '库存不足'], 400);\n }\n\n // 开启事务\n Redis::multi();\n\n // 减少库存\n Redis::decr($stockKey);\n\n // 提交事务并执行\n $execResult = Redis::exec();\n\n // 如果事务执行失败,说明库存发生了变化,返回错误\n if (!$execResult) {\n return response()->json(['message' => '库存不足'], 400);\n }\n\n // 执行购买逻辑\n\n return response()->json(['message' => '购买成功']);\n }\n}\n\n\n在上面的例子中,我们使用了Redis的WATCH命令来监听库存键,确保在减少库存之前没有其他并发请求修改了库存。如果监听期间库存发生了变化,事务执行会失败,我们可以根据执行结果判断库存是否足够。\n\n注意:为了简化示例,购买逻辑部分没有完整实现,你可以根据实际业务需求进行具体的实现。另外,你可能需要在Lumen配置文件中配置Redis连接信息。

PHP 高并发库存控制实战:Lumen框架 + Redis 防止超卖案例

原文地址: https://www.cveoy.top/t/topic/pEZv 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录