第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

php+redis搶購功能,并發(fā)問題

php+redis搶購功能,并發(fā)問題

PHP
拉風(fēng)的咖菲貓 2019-03-15 08:36:11
今天嘗試寫并發(fā)搶購功能,再網(wǎng)上找了相關(guān)資料后,實(shí)現(xiàn)了如下: <?php #開始搶購,檢測庫存 $inventoryData = $this->redis->get($inventoryKey); if ($inventoryData == null) { //庫存不足 return '-1'; } #解析json $inventoryData = json_decode($inventoryData, true); #檢測庫存 if ($inventoryData['inventory'] == 0) { //庫存不足 return '-1'; } //開啟事務(wù) $this->redis->watch($inventoryKey); //事務(wù)開始 $this->redis->multi(); //將搶購數(shù)據(jù)加入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'; 經(jīng)過并發(fā)測試:始終都會有重復(fù)的,請各位大佬講解講解
查看完整描述

4 回答

?
撒科打諢

TA貢獻(xiàn)1934條經(jīng)驗(yàn) 獲得超2個贊

庫存做原子自減

查看完整回答
反對 回復(fù) 2019-03-18
?
GCT1015

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超4個贊

用原子自減只能解決redis本身內(nèi)的并發(fā)問題,但程序中并發(fā)處理也有問題。像Nine所說的一樣,會存在多條訪問全都通過前面的檢測。必須在php程序內(nèi)做原子限制。像一些高并發(fā)下的活動頁面,根據(jù)實(shí)際業(yè)務(wù)做法有很多。像樓主的業(yè)務(wù)邏輯,我覺得首先可以讓庫存的key自減,然后直接根據(jù)返回key的值直接判斷是否小于或者等于0。

查看完整回答
反對 回復(fù) 2019-03-18
?
qq_花開花謝_0

TA貢獻(xiàn)1835條經(jīng)驗(yàn) 獲得超7個贊

我覺得這個問題可以不用事務(wù)解決的啊,還有原子自減string也是可以減為負(fù)的啊,難道負(fù)的庫存也合理么?這個東西用list完美解決,根本不需要事務(wù)啊

查看完整回答
反對 回復(fù) 2019-03-18
  • 4 回答
  • 0 關(guān)注
  • 444 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號