Java秒殺
㈠ java秒殺怎麼解決
具體的業務還是得需要你自己定製.\x0d你的需求實際上是一個變形的生產者-消費者實現.
對於此類需求,主要是將請求和實際的處理過程解耦,一般都是採取非同步的方式來通知請求方,
這跟用不用redis其實沒有多大的關系.一般的實現方法是你需要將用戶的請求封裝成一個Task,
然後將這個Task再push到redis隊列,然後後端的worker.php完全可以多進程、
多線程的並發處理Task並將處理結果回調給請求方.這里唯一麻煩點的就是這個Task的設計,
需要能夠包含請求信息(請求內容,請求方標識等等).
㈡ 用java如何實現秒殺流程啊
不考慮多伺服器,限制線程池的大小和隊列的限制來實現。
代碼如下:
packageorg.zhang;
importjava.util.concurrent.BlockingQueue;
importjava.util.concurrent.Executors;
importjava.util.concurrent.SynchronousQueue;
importjava.util.concurrent.ThreadPoolExecutor;
importjava.util.concurrent.TimeUnit;
/**
*單伺服器用線程池實現秒殺的思路一
*
*@authorzhanghaijun
*
*/
publicclassExecutorsTest{
publicstaticbooleanflag=true;//秒殺物品的標記
publicstaticvoidmain(String[]args){
ThreadPoolExecutorpool=newThreadPoolExecutor(1,1,0L,
TimeUnit.MILLISECONDS,newSynchronousQueue<Runnable>());
ThreadTestt1=newThreadTest("張三");
ThreadTestt2=newThreadTest("李四");
ThreadTestt3=newThreadTest("王五");
try{
pool.execute(t1);
}catch(Exceptione){
System.out.println(t1.getUserName()+"沒有搶到");
}
try{
pool.execute(t3);
}catch(Exceptione){
System.out.println(t3.getUserName()+"沒有搶到");
}
try{
pool.execute(t2);
}catch(Exceptione){
System.out.println(t2.getUserName()+"沒有搶到");
}
pool.shutdown();
}
}
classThreadTestextendsThread{
privateStringuserName;
publicThreadTest(StringuserName){
super();
this.userName=userName;
}
@Override
publicvoidrun(){
try{
Thread.sleep(200);
if(ExecutorsTest.flag){
System.out.println(this.userName+"秒殺成功");
ExecutorsTest.flag=false;
}
}catch(InterruptedExceptione){
e.printStackTrace();
}
}
publicStringgetUserName(){
returnuserName;
}
publicvoidsetUserName(StringuserName){
this.userName=userName;
}
}
㈢ java 秒殺為什麼會出現超買
因為 產生了線程安全問題
㈣ 用JAVA怎麼寫一個秒殺器。求具體代碼
最好不要用java寫秒殺器,因為你就算用 httpclient 拿到的也是未經過渲染的html頁面,很多頁面js都沒有載入,你根本不知道渲染之後的頁面長什麼樣子,你最好學學木魚的火車票搶票助手,他用的是 firefox 的插件 scriptish 來寫搶票腳本,其實搶票跟秒殺是一個原理的,我第一個秒的程序就是照著他的程序改的,用這個上手也比較容易,但是要求你對javascript比較熟悉,不過比用java實現靠譜多了
㈤ java秒殺並發怎麼處理
用redis,比如秒殺一個商品,把該商品的信息放在redis中,主要是那個庫存量,搶購的時候在redis中操作數據非常快,每秒差不多8萬次讀寫操作,這樣的並發量已經夠用了
㈥ java商品搶購秒殺應該怎麼實現
別去騙人的
㈦ Java如何解決超賣
一、人數閥門設計:進行用戶人群過濾。
商品數量只有100份,秒殺人數有10000人,那麼我們就設計1道閥門(根據情況,可以設計3道或者2道都可以的)。
在整點的時候,我們對點擊了「購買」按鈕後,我們只運行500人進入信息填寫頁面,信息填寫完成後提交訂單。效果如下:
①商品詳情點擊購買(秒殺)--》②輸入信息提交訂單--》③進行支付
10000人 500人 (這里也可以設計閥門,只允許多少人進入支付)
其他未進入的如何處理乃?顯示已搶完或者排隊等待(這就是後面要提到的排隊系統設計)。
二、會員排隊設計:對用戶進行排隊,排在前面的先購買
這相當於是消息隊列模式了,如果秒殺是立即知道結果,排隊可能會有點雞肋。
在第二步②輸入信息提交訂單後進行排隊,排在前面的先購買,排在後面的後購買
三、問答問題設計:過濾掉一些反應慢的用戶
在第一步①點擊購買後跳轉到問題頁面,用戶必須回答正確問題後,方可進入後面的流程
四、庫存緩存設計:緩存庫存,判斷用戶購買的商品是否還有,不讀取資料庫,速度快,也不會增加資料庫負擔,
經過前面的過濾,超賣的可能性比較低了提前將商品庫存緩存起來,到下單購買的時候,用戶購買了就減1,每次都通過庫存緩存判斷一下,如果為0就顯示已搶完。
五、頁面靜態設計:盡量靜態緩存化【CDN那些這里不做考慮】
第一步①商品詳情頁面,盡量進行緩存,減輕大批量用戶在訪問商品頁面的時候,大量查詢資料庫。
問答問題頁面:全靜態,載入快,無資料庫負擔。
排隊等待頁面:全靜態,載入快,無資料庫負擔。
排隊結束頁面:全靜態,載入快,無資料庫負擔。
㈧ 開學大三,准備做Java開發,簡歷里放跟著視頻做的秒殺系統很low嗎
應屆的應聘,其實看的不是你練了哪些。面試主要考察點有:1、你的基礎掌握的怎麼樣;2、你的學習能力怎麼樣;3、你的工作態度怎麼樣;最後,就是面試公司所使用的技術你會不會,如果不會,就回到問題2,就得看面試官對你學習能力的評估怎麼樣了。
㈨ 《轉》我要回家!教你如何秒殺12306,JAVA程序搶票成功!
加個許可權是對的,另外需要搶票的明天早上就趕緊搶吧 估計軟體馬上要傳遍微博了
㈩ java中秒殺使用的隊列
首先說 隊列這種數據結構你應該了解吧 。
可以用JDK自帶的 或者自己實現的也行,你問的如何實現隊列是指的隊列這中數據結構? 如果是 ,那你還是自己看數據結構那本書,原理都一樣 跟語言無關, 你可用JDK自帶的幾種隊列 查看JDKAPI文檔 實現了Queue介面的各種隊列基本都有,比如 線程安全的 ConcurrentLinkedQueue 這個是一個無界的線程安全的隊列 或者 ArrayBlockingQueue 這個隊列實現是一個有界阻塞隊列 都能夠實現你說的 或者 你用非線程安全的也成 只不過你自己控制線程的安全性就好了;.