一、模擬秒殺系統
使用者id:userid,隨機數生成
商品id:prodid,固定1001
商品庫存:key=seckill_1001,value=100 【redis快取】
已秒殺成功使用者:key=seckill_1001_user 【set集合】
@controller
public class seckillcontroller
}
@service
public class seckillservice
// 秒殺成功
if (jedis.sismember(keyuser, userid))
// 判斷庫存
if (integer.parseint(store) <= 0)
// 秒殺 開啟事務——解決超賣問題,但會引發庫存遺留問題
transaction transaction = jedis.multi();
transaction.decr(keystore);
transaction.sadd(keyuser, userid);
listlist = transaction.exec();
if (list == null || list.size() == 0)
jedis.close();
system.out.println("秒殺成功!");
return true;
}// 利用lua指令碼解決超賣和庫存遺留問題
public boolean doseckillbyscript(string userid, string prodid) else if("1".equals(s))else if("2".equals(s))else
jedis.close();
return true;
}// 連線池
private static class generatejedispool}}
二、ab壓測工具(windows10)
解壓進入bin目錄,開啟命令視窗即可壓測,提前開啟redis服務以及web服務,準備好相應資料
ps: -c 100 【指定併發數】
-n 20000 【指定請求數】
http://localhost:8081/seckill 【目標url,up是本機測試】
-p e:\post.txt 【-p是指定post請求引數檔案位置,如下圖】
壓測結果
快取結果
服務端結果
模擬測試秒殺
1.我的環境是windows下的phpstudy,進入到apache bin目錄裡面有個ab.exe,壓力測試命令如下 ab.exe c 200 n 1000 2.mysql.php 如下 正常的邏輯思維,壓力增大後,導致資料庫num欄位成為負數,將下面 貼上到自己 下測試即可。在test資料庫下,...
秒殺 秒殺系統 優化之路
1 im系統,例如qq或者微博,每個人都讀自己的資料 好友列表 群列表 個人資訊 2 微博系統,每個人讀你關注的人的資料,乙個人讀多個人的資料 3 秒殺系統,庫存只有乙份,所有人會在集中的時間讀和寫這些資料,多個人讀乙個資料。例如 小公尺手機每週二的秒殺,可能手機只有1萬部,但瞬時進入的流量可能是幾...
ab 模擬測試秒殺
1.我的環境是windows下的phpstudy,進入到apache bin目錄裡面有個ab.exe,壓力測試命令如 ab.exe c 200 n 1000 2.mysql.php 如下正常的邏輯思維,壓力增大後,導致資料庫num欄位成為負數,將下面 貼上到自己 下測試即可。在test資料庫下,新建...