模擬秒殺系統

2021-10-25 11:20:04 字數 2027 閱讀 4434

一、模擬秒殺系統

使用者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資料庫下,新建...