<?php
//本指令碼依賴 php-redis擴充套件,請自行安裝
//商品
class good
public function __get(string $name));
}throw new \exception('method not exists :'.$name);
// todo: implement __get() method.
}/**增加庫存
* @param int $count
* @return int
*/public function addstock(int $count) : int
/**減少庫存
* @param int $count
* @return int
*/public function downstock(int $count) : int
/**設定商品庫存
* @param int $count
* @return true
*/public function setstock(int $count) : int
}class user
public function __get(string $name));
}throw new \exception('method not exists :'.$name);
// todo: implement __get() method.
}}inte***ce cart
//act 搶購
class act implements cart
//商品佇列鍵
public function getgoodrediskey()
//使用者hash
public function getuserrediskey()
//初始化商品庫存到redis
public function addgoodstocktoredis()}}
//獲取redis的商品庫存數量
public function getredisgoodstock()
/**判斷使用者是否已經參與搶購了
* @return bool true為未參與
*/public function usernotbuy()
/*** 使用者搶購,減少商品庫存
* @return bool true為搶購成功
*/public function downgoodstock()
public function buy()
}}$total = 10;
$good = new good('棒棒糖', '5', $total);
$redis = new redis();
$redis->connect('127.0.0.1');
//模擬多個使用者
while($total)
搶購成功;
商品剩餘庫存:
str;
} else
$total = $good->stock;
unset($user, $activity);
}?>
003 Task併發案例
task 併發有的時候,我們我們會執行多個耗時任務,比如我們會請求兩三個介面,之後通過乙個集合來裝載所有的介面的返回值,組成乙個大的集合.如果我們使用順序執行的方式來執行這些介面,那麼需要依次等待這些介面響應完成,才能組成自己想要的結果集.這會非常的浪費時間,那有什麼辦法可以更快的拿到這些結果呢?當...
PHP Redis解決高併發下的秒殺(樂觀鎖思路)
搶購 秒殺是平常很常見的場景,面試的時候面試官也經常會問到,比如問你 中的搶購秒殺是怎麼實現的等等。搶購 秒殺實現很簡單,但是有些問題需要解決,主要針對兩個問題 一 高併發對資料庫產生的壓力 二 競爭狀態下如何解決庫存的正確減少 超賣 問題 第乙個問題,對於php來說很簡單,用快取技術就可以緩解資料...
PHP redis樂觀鎖防止高併發超賣
error level error reporting 0 con new mysqli localhost root root test if con sql select from products where id 1 result mysqli query con,sql aa mysqli...