一.
在專案中,我們經常用到如下方式進行介面呼叫:
有多少請求訪問,就會呼叫多少次第三方介面或資料庫,這樣的情況在高併發場景下很容易出現執行緒被打滿,返回結果慢。
為了優化這個介面,後台可以將相同的請求進行合併,然後呼叫批量的查詢介面。
請求合併:
下面上**:
已查詢資料庫舉例
1.建立請求類:
@data
@builder
@allargsconstructor
@noargsconstructor
public class request
2.具體業務處理類:
@component
public class completablefuturetest
int size = queue.size();
listrequests = new arraylist<>(size);
for(int i=0;icodes = new arraylist<>();
for (request request : requests)
hashmapresponsemap = new hashmap<>();
listrubbishes = rubbishservice.getrubbishbyrubbishids(codes);
for (rubbish rubbish : rubbishes)
//將結果響應給每乙個單獨的使用者請求。
for (request request : requests)
}catch (exception e)
}},0,100, timeunit.milliseconds);//每100mm從佇列中取一次資料
}public void future(string id)throws exception catch (exception e)
}}.start();}}
}
高併發之請求合併
應用場景redis官方介紹,redis單機讀寫效能12萬 s,批量處理能達到70w 秒。不管是快取還是資料庫,都有批量處理能力。當系統達到瓶頸時,才充分考慮壓榨效能。適用於電商雙十一,特定高併發場景。思路1 乙個使用者請求到來時,將請求放在乙個佇列中,單執行緒定時任務10ms從佇列中取資料進行處理。...
高併發場景下的限流策略
目錄快取 降級 限流 漏桶演算法 令牌桶演算法 漏桶演算法與令牌桶演算法的區別 有效提公升熱點資料的訪問效率,在高併發 大流量的場景降低服務端壓力。當訪問量快速增長 服務可能會出現一些問題 響應超時 或者會存在非核心服務影響到核心流程的效能時,仍然需要保證服務的可用性,即便是有損服務。所以意味著我們...
高併發場景下ArrayList的執行緒安全問題
arraylist是我們常用的資料結構,在併發場景下是執行緒不安全的。在讀多寫少的場景下,我們一般會用讀寫鎖 readwritelock來保證共享物件的執行緒安全性。public object read public void write 這裡能解決部分問題。但是還是存在當有乙個執行緒在write的...