高併發之請求合併

2021-10-08 17:19:47 字數 1464 閱讀 4533

應用場景

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是乙個統一資源識別符號 ...