利用樂觀鎖及redis解決電商秒殺高併發基本邏輯

2022-05-10 20:54:23 字數 617 閱讀 5229

解決秒殺高併發問題方法很多,如悲觀鎖,訊息佇列等……

利用樂觀鎖及redis解決秒殺高併發基本邏輯

//初始化redis

$redis = new redis();

// 設定鍵值,起到監視作用  執行事務之前,判斷被修改,回滾

$redis->watch('sales');

// 獲取銷量

$sales = $redis->get('sales');

// 如果銷量存在,先刪除,false

// $redis->del('sales');

// 庫存,秒殺兩件產品

$store = 2;

// 判斷銷量是否大於等於庫存

if($sales >= $store)

// 事務塊內多條命令會按先後順序放入乙個佇列中,最後有exec命令原子性的執行

//redis開啟事務

$reids->multi();

// 更新銷量

$redis->set('sales', $sales+1);

$res = $redis->exec();

// 記錄到redis裡面,用守護程序 swoole多程序去執行 !!!

if($res)

利用Redis鎖解決併發問題

用redis處理高併發是個很常見的方式,因為redis的訪問效率很高 直接訪問記憶體 一般我們會用來處理 一瞬間的併發量。那如果要使用redis來進行高併發問題的解決的話,應注意以下幾點 1 首先我們要先知道,我們在儲存時,應使用redis的setnx方法,不應該使用set方法,因為setnx擁有原...

利用Redis鎖解決高併發問題

這裡我們主要利用redis的setnx的命令來處理高併發。setnx 有兩個引數。第乙個引數表示鍵。第二個引數表示值。如果當前鍵不存在,那麼會插入當前鍵,將第二個引數做為值。返回 1。如果當前鍵存在,那麼會返回0。建立庫存表 create tablestorage idint 11 unsigned...

利用Redis鎖解決高併發問題

這裡我們主要利用redis的setnx的命令來處理高併發。setnx有兩個引數。第乙個引數表示鍵。第二個引數表示值。如果當前鍵不存在,那麼會插入當前鍵,將第二個引數做為值。返回1。如果當前鍵存在,那麼會返回0。建立庫存表 create table storage id int 11 unsigned...