今天嘗試寫并發搶購功能,再網上找了相關資料后,實現了如下:
<?php
#開始搶購,檢測庫存
$inventoryData = $this->redis->get($inventoryKey);
if ($inventoryData == null) {
//庫存不足
return '-1';
}
#解析json
$inventoryData = json_decode($inventoryData, true);
#檢測庫存
if ($inventoryData['inventory'] == 0) {
//庫存不足
return '-1';
}
//開啟事務
$this->redis->watch($inventoryKey);
//事務開始
$this->redis->multi();
//將搶購數據加入redis
$this->redis->lPush('kill_goods_' . $data['goods_id'], json_encode($data));
$goodsData = ['id' => $data['goods_id'], 'inventory' => $inventoryData['inventory'] - 1];
$this->redis->set($inventoryKey, json_encode($goodsData));
$result = $this->redis->exec();
if ($result) {
file_put_contents('1.txt', $inventoryData['inventory'] . PHP_EOL, FILE_APPEND);
return 1;
}
return '-1';
經過并發測試:始終都會有重復的,請各位大佬講解講解
- 4 回答
- 0 關注
- 448 瀏覽
添加回答
舉報
0/150
提交
取消