效率
變通實(shí)現(xiàn)微服務(wù)的per request以提高IO效率中提到的同一請求過程中對于同一個方法的多次讀取只實(shí)際調(diào)用一次,其余的讀取均從第一次讀取的結(jié)果緩存中獲取,以提高讀取的效率。實(shí)現(xiàn)方案是引入了Context對象,可以理解成上下文的一個環(huán)境變量,業(yè)務(wù)方法在獲取數(shù)據(jù)時先從Context中取,如果取不到從數(shù)據(jù)庫中加載并將結(jié)果寫入Context中,而Context是通過ThreadLocal來存儲。但實(shí)現(xiàn)有點(diǎn)復(fù)雜需要尋找優(yōu)化方案。
Context方案的缺點(diǎn)
- 復(fù)雜度增強(qiáng),因?yàn)樾枰隒ontext的特殊概念
- 復(fù)用性比較低。需要在Context中為每種數(shù)據(jù)維護(hù)一個屬性。比如存儲用戶,產(chǎn)品,價格等。當(dāng)然也可以利用Map,這樣會導(dǎo)致復(fù)雜度會更加強(qiáng),在緩存清除的時候也會隨著數(shù)據(jù)存儲結(jié)構(gòu)的復(fù)雜度提升而提升:之前是為每種數(shù)據(jù)定義一個ThreadLocal。
private ThreadLocal<CiaUserInfo> ciaUserInfoThreadLocal=new ThreadLocal<>();
- 需要在業(yè)務(wù)方法中嵌入操作Context的方法,具備比較強(qiáng)的代碼侵入性。下面代碼中的getCiauserInfoFromCache就嵌入在業(yè)務(wù)代碼中。
public CiaUserInfo getTokenInfo(String token) throws Exception { CiaUserInfo result
延伸閱讀
- ssh框架
2016-09-30
- 阿里移動安全 [無線安全]玩轉(zhuǎn)無線電——不安全的藍(lán)牙鎖
2017-07-26
- 消息隊(duì)列NetMQ 原理分析4-Socket、Session、Option和Pipe
2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】
2017-07-26
- 詞向量-LRWE模型-更好地識別反義詞同義詞
2017-07-26
- 從棧不平衡問題 理解 calling convention
2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明
2017-07-26
- Swift實(shí)現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解
2017-07-26
- 阿里移動安全 Android端惡意鎖屏勒索應(yīng)用分析
2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來看看(二)
2017-07-26
學(xué)習(xí)是年輕人改變自己的最好方式