redis 實現防止超賣現象

2021-10-19 18:30:03 字數 886 閱讀 2400

redis實現防止商品超賣現象主要是利用redis的原子性,在判斷是否超賣過程中,最好不要有資料庫查詢這種具有耗時性的操作。

話不多說直接上**

$client

=new

redis()

;$client

->

connect

("127.0.0.1"

,6379

);

第一步:肯定是連線redis

$producttotal=10

;//產品總數

$productoverkey

="pd_test_key"

;$client

->

setnx

($productoverkey,0

);$productover

=$client

->

get(

$productoverkey);

$client

->

watch

($productoverkey

);

第二步:

// 如果賣出的產品數量比總數小則可以執行操作if(

$productover

<

$producttotal

)else

}else

第三步:

博主這裡是利用redis的watch和multi的原子性,當然也可以利用lua指令碼來實現原子性

用ab測試工具測試

ab -c 100 -n 1000
沒有出現超賣現象

ps:

高併發下防止商品超賣的Redis實現

朋友面試被問到高併發下,如何防止10個商品被超賣,當時想到了訊息佇列。我也搜了下,都是推薦記憶體處理秒殺類的高併發搶購,減庫存則是通過非同步的方式寫到資料庫,但是在這之前就已經對秒殺成功的使用者完成了登記。看了的答案,總結大致如下 1.首先定義乙個 redis 佇列名為 sku awards,裡面的...

超賣現象及解決

本專案的超賣類似於電商的秒殺超賣現象 1.不同使用者在讀請求的時候,發現商品庫存足夠,然後同時發起請求,進行秒殺操作,減庫存,導致庫存減為負數。2.同乙個使用者在有庫存的時候,連續發出多個請求,兩個請求同時存在,於是生成多個訂單。對於第一種超賣現象 1 最簡單的方法,更新資料庫減庫存的時候,進行庫存...

秒殺系統防止庫存超賣

第一種 通過資料庫樂觀鎖實現 小型電商 update productstocks set realstock realstock where sku and realstock 0 根據受影響的行數判斷是否執行成功 大型網際網路不是這麼玩的 資料庫有瓶頸 第二種 使用redis 分布式鎖實現 var...