應用場景
redis官方介紹,redis單機讀寫效能12萬/s,批量處理能達到70w/秒。不管是快取還是資料庫,都有批量處理能力。當系統達到瓶頸時,才充分考慮壓榨效能。適用於電商雙十一,特定高併發場景。思路
1、乙個使用者請求到來時,將請求放在乙個佇列中,單執行緒定時任務10ms從佇列中取資料進行處理。**實現:2、定時任務,把佇列中的請求,批量的方式向後端和redis快取或資料庫發起批量請求。
3、請求合併,請求阻塞等待請求處理完畢,需要用到future
/**
* @author mrcai
* @date 2020/05/30
*/public
class
mergerequesttest
mapmap = maps.
newhashmap()
; list
codes = lists.
newarraylist()
;for
(int i =
0; i < size; i++
) system.out.
println
("--------------------------- "
+ codes.
size()
);map
results =
getresults
(codes)
;for
(integer code : results.
keyset()
)},0
,1, timeunit.milliseconds)
; atomicinteger count =
newatomicinteger(0
);for(
int i =
0; i <
1000
; i++
)catch
(exception e)})
.start()
;}}//獲取單個結果
public
static string getresult
(integer code)
throws exception
//多結果查詢(批量介面)
public
static map
getresults
(list
codes)
return map;
}static
class
request
}
總結:
1、特定特大高併發場景使用,平時可通過引數配置,對請求合併進行動態配置
2、依舊存在阻塞佇列中資料無限大的問題(10ms中請求合併過於龐大)
個人解決方案:
高併發場景下的請求合併
一.在專案中,我們經常用到如下方式進行介面呼叫 有多少請求訪問,就會呼叫多少次第三方介面或資料庫,這樣的情況在高併發場景下很容易出現執行緒被打滿,返回結果慢。為了優化這個介面,後台可以將相同的請求進行合併,然後呼叫批量的查詢介面。請求合併 下面上 已查詢資料庫舉例 1.建立請求類 data buil...
playframe 處理高併發請求
參考此例子進行優化 具某同事說,本來併發200就崩潰的 專案 輸出到tomcat 使用了以上配置,居然上到接近1000 下面是部分 public static void updatelivedata integer id,string nv,string f 這是controller的方法 publ...
HTTP協議之請求
http請求由三部分組成,分別是 請求行 訊息報頭 請求正文。1 請求行以乙個方法符號開頭,以空格分開,後面跟著請求的uri和協議的版本,格式如下 method request uri http version crlf,其中 method表示請求方法 request uri是乙個統一資源識別符號 ...