redis實現高併發下的搶購 秒殺功能

2021-09-23 01:49:17 字數 935 閱讀 2016

常規寫法:

查詢出對應商品的庫存,看是否大於0,然後執行生成訂單等操作,但是在判斷庫存是否大於0處,如果在高併發下就會有問題,導致庫存量出現負數

redis的解決方案:

1,<?php

inlcude_oncea './include/db.php';

$redis = new redis();

$resid->connect('127.0.0.1', 6379);

$reds_name = 'miaosha';

$db = db::getinstance();

//死迴圈

while(1) 

//切割出時間, uid

$user_arr = explode('%', $user);

$insert_data = array(

'uid' => $user_arr[0],

'time_stamp' => $use_arr[1]]

);//儲存到資料庫中

$res = $db->insert('redis_queue', $insert_data);:

//資料庫插入失敗時回滾

if (!$res) 

}//釋放redis

$redis->close();}2.

connect('127.0.0.1', 6379);

$reds_name = 'miaosha';

for ($i = 0;$i < 100;$i++)

//接收使用者的id,

//$uid = $_get['uid'];

//獲取redis裡面已有的數量

$num = 10;

//如果當前人數少於10的時候,則加入這個佇列

if ($redis->llen($resid_name) < 10) else

$redis->close();

php結合redis實現高併發下的搶購 秒殺功能

搶購 秒殺是如今很常見的乙個應用場景,主要需要解決的問題有兩個 1 高併發對資料庫產生的壓力 2 競爭狀態下如何解決庫存的正確減少 超賣 問題 對於第乙個問題,已經很容易想到用快取來處理搶購,避免直接運算元據庫,例如使用redis。重點在於第二個問題 優化方案1 將庫存欄位number欄位設為uns...

高併發下搶購

了解高併發以及怎麼處理後,測試一下專案中下單的 邏輯很簡單,goods表中stock設定為unsigned。剛開始你可能會覺得這樣會出現超單的情況,但是測試後,沒有出現超單的情況。看似沒有問題,但是看過日誌發現問題還挺多的。這之前請看下這篇文章裡面有處理高併發下單的情況。goods id num g...

Redis實現高併發下的搶購,秒殺,解決方案

在電子商務發達的今天,各種秒殺,搶購活動的場景不少,如何解決高併發下出現的訂單超發情況呢?在常規情況下,我們會根據使用者提交的請求去查詢商品庫存,如果庫存小於0則訂單生成失敗。但是這種情況下經常了訂單需要的數量超過了庫存數量,即出現負庫存。先討論常規場景測試 我們在redis中設定乙個庫存表,就是個...