在日常工作中,開發(fā)者經(jīng)常利用緩存來優(yōu)化站點或應(yīng)用程序,然而在實際應(yīng)用中,大家使用緩存時,總會存在或多或少的誤區(qū),反而影響了站點或應(yīng)用程序的正常運行。近日,highscalability上的一篇文章總結(jié)了十大使用緩存的誤區(qū)和建議。
現(xiàn)就對這十大緩存誤區(qū)以及使用建議進行一個全面的梳理:
1、依賴默認(rèn)的序列化方式
使用默認(rèn)的序列化處理方式可能會消耗大量的CPU資源,尤其是處理復(fù)雜類型數(shù)據(jù)時。所以建議大家一定要根據(jù)所使用語言和環(huán)境的情況,采用最合理、有效的序列化和反序列化方式。
2、在單一緩存中存儲大對象數(shù)據(jù)
由于序列化和反序列化需要一定的資源開銷,當(dāng)處于高并發(fā)高負(fù)載的情況下,對大對象數(shù)據(jù)的頻繁讀取有可能會使得服務(wù)器的CPU崩潰,所以建議大家把大對象數(shù)據(jù)分成為較小的子對象,然后再各自進行緩存。
3、在不同線程間使用緩存共享對象
在競態(tài)條件(Race conditions)條件下,當(dāng)寫線程對緩存進行寫入操作時,如果這是讀線程剛好也要訪問同一緩沖對象,就有可能讀取臟數(shù)據(jù),所以在實際開發(fā)中要根據(jù)實際情況采取外部鎖機制,以保證緩存數(shù)據(jù)的正確讀寫。
4、認(rèn)為存儲數(shù)據(jù)操作后,數(shù)據(jù)即刻就能存儲到緩存中
剛進行寫入緩存操作的數(shù)據(jù)并不一定能夠馬上寫入緩存,這是因為當(dāng)緩存空間不足時,剛寫入的緩存有可能被刷新掉。所以在編寫程序時,應(yīng)該首先對獲得緩存的值作空值檢測。
5、使用嵌套對象存儲整個集合
如果將整個集合對象數(shù)據(jù)進行嵌套緩存的話,獲得其中某個具體元素的性能將會嚴(yán)重受到影響,這是因為整個集合存儲意味著對整個嵌套對象進行序列化。有鑒于此,建議單獨對每個元素進行緩存,這樣就可以做到對每個對象分別更新和讀取,以減少序列化的影響。
6、對父子對象采取統(tǒng)一與單獨混用的存儲方式
有時候一個對象可能擁有兩個或更多的父對象,同一對象存儲在不同地方,這樣就會造成緩存的浪費。為了不讓同一對象存儲于不同地方,這就需要根據(jù)統(tǒng)一對象本身的鍵進行緩存,這樣父對象就能夠根據(jù)需要訪問子對象。
7、對配置信息進行緩存
緩存數(shù)據(jù)的訪問是有代價的,所以要盡可能把影響減到最低,所以建議使用本地靜態(tài)變量代替緩存對配置數(shù)據(jù)進行存儲。
8、對實時對象進行緩存
如果對實時對象(例如:流、文件、注冊信息或者網(wǎng)絡(luò)情況)的引用進行緩存的話,當(dāng)緩存數(shù)據(jù)被刪除后,之前緩存的實時對象不被刪除,這樣會造成系統(tǒng)資源泄漏,所以不要對實時對象進行存儲。
9、使用多個鍵存儲同一對象
盡管使用多個鍵存儲同一對象就使得使用一個鍵和索引號來進行訪問時帶來便利,但是當(dāng)緩存是基于遠(yuǎn)程緩存的話,任何關(guān)于對象改變都是不可見的,這樣會導(dǎo)致緩存數(shù)據(jù)同步問題的發(fā)生,所以不建議使用多個鍵存儲同一對象。
10、在連續(xù)存儲中進行更新或刪除后不及時更新相應(yīng)緩存對象
由于在一個遠(yuǎn)程緩存中,數(shù)據(jù)以拷貝方式存儲,所以當(dāng)更新對象時,緩存不會被同步更新。所以更新對象時,緩存必須被明確地進行更新。然而在基于內(nèi)存的緩存中,當(dāng)刪除一個對象時,在緩存中不會被同步刪除,所以建議通過程序確保緩存對象被正確刪除。
核心關(guān)注:拓步ERP系統(tǒng)平臺是覆蓋了眾多的業(yè)務(wù)領(lǐng)域、行業(yè)應(yīng)用,蘊涵了豐富的ERP管理思想,集成了ERP軟件業(yè)務(wù)管理理念,功能涉及供應(yīng)鏈、成本、制造、CRM、HR等眾多業(yè)務(wù)領(lǐng)域的管理,全面涵蓋了企業(yè)關(guān)注ERP管理系統(tǒng)的核心領(lǐng)域,是眾多中小企業(yè)信息化建設(shè)首選的ERP管理軟件信賴品牌。
轉(zhuǎn)載請注明出處:拓步ERP資訊網(wǎng)http://www.ezxoed.cn/
本文標(biāo)題:總結(jié):十個常見的緩存使用誤區(qū)及建議
本文網(wǎng)址:http://www.ezxoed.cn/html/consultation/10839617261.html