10個常見的緩存使用誤區

摘要:在日常工作中,開發者經常利用緩存來進行優化站點或優化應用程序。但在實際應用中,在使用緩存時,總是那么不盡如意。這什么原因呢?本文,筆者收集了最為常見的十大緩存誤區以及使用建議。

在日常工作中,開發者經常利用緩存來進行優化站點或優化應用程序。但在實際應用中,在使用緩存時,總是那么不盡如意。這什么原因呢?本文,筆者收集了最為常見的十大緩存誤區以及使用建議。我們一起來看下 :

1.? 依賴默認的序列化。

默認的序列化處理方式可能會消耗大量的CPU資源,特別是處理復雜類型數據時。所以建議要根據語音和環境的不同,采用最優化的序列化和反序列化方式。

2.? 在單一緩存中存儲大對象數據。

由于序列化和反序列化需要一定的資源開銷,處于并發負載時,大對象圖形數據的頻繁讀取有可能會讓服務器的CPU崩潰。相反,不妨考慮把大對象數據打散為較小的子對象,之后再各自進行緩存。根據你的需求讀取最小的數據單元。

3.? 在不同進程間使用緩存共享對象。

出現競態條件(Race conditions)時,當寫進程也參與其中,同時剛好程序的某部分也訪問同一緩沖對象,情況會變得更壞。采取外部鎖機制是有必要的。

4.? 儲存數據后立馬進行緩存。

千萬不要倉促行事,即使是剛寫入不久,當存儲資源緊張時,一個緩存足以阻礙程序運行。所以用代碼來進行緩存空值返回檢查是很有必要的。

5.? 使用嵌套對象存儲全集合。

由于序列化的影響,執行一次全集合存儲會導致程序運行變慢。有鑒于此,單獨對獨立對象進行緩存可以實現分開讀取,減少序列化影響。

6.? 對父子對象采取統一與單獨混用的存儲方式。

有時候一個對象可能擁有兩個或更多的父對象。根據統一對象本身的鍵進行緩存以便不會把同一對象存儲于不同地方,這樣父對象可以按需訪問子對象。

7.? 對配置信息進行緩存。

使用進程的本地靜態變量來存儲配置數據。緩存數據訪問是有代價的,所以要盡可能把影響減到最低。

8.? 對活性對象進行緩存,例如:流,文件,注冊信息或者網絡。

不要嘗試對上述等包含引用信息的活性對象進行緩存。因為當緩存數據被刪除后,之前緩存的活性對象不會被刪除,這樣會造成系統資源泄漏。

9.? 對同一對象采取多鍵存儲。

這樣或許在使用一個鍵和索引號來進行訪問時帶來便利。如果一個緩存是in-memory的,這樣做是可行的,因為緩存中包含了同一對象的引用信息,也就是說一旦該對象發生變更,都可以透過兩邊的訪問路徑進行查看。如果是遠程(外部)緩存,任何變更的發生都是不可見的,所以這樣會導致同步問題的產生。

10.在連續存儲中進行更新或刪除后沒有及時更新相應緩存對象。

在一個遠程緩存中,數據以拷貝方式存儲,所以當更新對象時,緩存不會被同步更新。緩存必須被明確指定,才能根據變更而進行更新。在in-memory緩存中,一個對象發生的變更是對所有人可見的。在刪除時情況類似,刪除一個對象時,在緩存中不會被同步刪除。這取決于程序本身如何確保緩存對象被正確刪除。

英文出自:highscalability

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/447385.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/447385.shtml
英文地址,請注明出處:http://en.pswp.cn/news/447385.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

十種程序語言幫你讀懂大數據的“秘密”

摘要:經過數年發展,當下大數據領域已充斥著各種各樣的分析工具,那么如何才能選擇自己適合的。本文從R、Scala、Java、Go、Python等10種語言著手,帶大家一覽大數據領域的常用工具。 【編者按】面對成千上萬條數據記錄,…

標準開源產品是打破供應商壟斷的關鍵

Mrten Mickos是美國桉樹系統公司的CEO,提出當公司拘泥于自己的設計和定制化時,與他們被供應商鎖定所受到的損害程度是相當的。Mickos解釋了為什么他認為采用標準開源產品是避免這兩種被鎖定類型的最好方式。當談到軟件和云服務時,業務鎖定是有…

專訪阿里云總裁王文彬:做出“用得爽”的工程產品

摘要:已擁有近百萬不同行業領域用戶的阿里云,在產品開發、服務輸出與生態系統建設等方面還將繼續加速,多點開花。 回顧在2014年已經過去的半年中,阿里云在產品開發、服務輸出與生態系統建設層面的諸多動作。不難看出,…

寫代碼前的準備,你做好了嗎?

我們程序員很容易給別人一種深刻的誤解:寫代碼的。包括我們自己有時候也會陷入這樣的圈套之中。很多程序員在接到任務之后,就會馬上想著如何用代碼來實現,這是一種很不好的做法。其實,在我們寫代碼之前,還有很多工作要…

周鴻祎:比情懷更重要的硬件創業三定律

7月31日,首屆福布斯中國創新峰會于東莞松山湖高新區召開,峰會集結了中國互聯網與制造業前沿的商業創新領袖,集中探討互聯網時代如何重鑄產業未來。 奇虎360董事長周鴻祎首先就互聯網創新闡述了自己對硬件和制造業未來的看法。他認為互聯網催…

C++11(及現代C++風格)和快速迭代式開發

過去的一年我在微軟亞洲研究院做輸入法,我們的產品叫“英庫拼音輸入法” (下載Beta版),如果你用過“英庫詞典”(現已更名為必應詞典),應該知道“英庫”這個名字(實際上我們的核心開發…

軟件系統分析師與架構師技能大PK(您具備了哪些呢?)

軟件系統分析師與架構師在職責與技能方面沒有明顯的界線,你中有我我中有你,同時也有各自自己的世界,很值得拿來比比。 系統分析師職責:告訴我們系統應該做什么。 l 管理到技術的橋梁 各領域業務到信息化技術的通知翻譯者。 l 對軟件項目進行整…

桌面系統和程序員

本周我出席了OpenStack峰會。在峰會上絕大多數應用部署都是基于Linux的,然而,大家使用的筆記本電腦最多的還是蘋果產的。人們寫代碼,最終要把代碼部署到Linux上,但在編碼時卻使用另外一種不同的操作系統。 最有趣的還是他們使用的…

原型設計工具的對比評測記錄(一)

概述:本文是美國的專業設計公司cooper公司的交互設計師Emily Schwartzman所寫的一篇對眾多原型設計工具的對比評測。這里是前半部分,從總體角度介紹評測及其結果。原型設計工具的對比評測記錄(一)原型設計工具的對比評測記錄&…

軟件開發人員進修必備的20本書

初級軟件開發人員進修必備的20本書(上) #原創 程序開發 申請達人,去除贊助商鏈接開發和編程向來就不是一件輕松的事,有時候你可能需要別人稍微點化一下,或者從書中得到一些有用的幫助。總而言之,無論是工作流程還是進修你的專業&a…

為什么我喜歡單獨編程

大約是一年前,我寫了一篇關于我為什么不喜歡結對編程的帖子。此文也是對該帖子的補充。 至今為止我已經在加利福尼亞州科學院工作5個月了。我創建了一個由美國國家科學基金會資助的關于螞蟻分類學的網站:antcat.org。 這是我作為一個程序員25年以來最棒…

如何看待自己寫的爛代碼

如果你不是入行不久的新程序員,你很可能會遇到一些你曾經寫過的老代碼,看到它們,你可能會有這樣的反應: 哦,shit!這是什么?當時我腦袋進水了? 我就這樣過。我的朋友和同事們都經歷過…

給創業者的一些建議

CEO要像個產品經理 就拿我的項目來說,網站的模板設計,視覺體驗,操作體驗,產品展示,網址等都是不合格的。創始人開始創業其實就是一個產品經理,好好雕琢你的產品。 不做機會最大的,只做自己擅長…

談操作系統的碎片化和融合

摘要:目前,Android和iOS統治著移動操作系統,桌面端被Windows所主宰,隨著智能家居、可穿戴設備等新興平臺的興起,造成了各家操作系統四分五裂的情況,但在不久的將來他們終究會走向融合。 目前,An…

盤點大數據的十大發展方向,Scale-out將成主流

摘要:隨著人們對大數據認知的加強,除去特點之外,人們開始更加關注于它的使用價值和未來的服務方向。本文列舉了大數據的十大發展方向,其中Scale-out將成為主流。 【編者按】如今,大數據儼然成為IT領域最受關注的熱詞之…

程序員的成功是否有規律可循?

摘要:自然界中存在許多規律,那么在程序人生上是否有規律可循呢?這種規律是如大多數人期望的那樣嗎?V眾投發起人李智勇對此進行了探討,他分析了必然與偶然、本質與細節,并就程序人生規律的三要素進行了解讀。…

S?D?I?與?A?S?I 接口詳解介紹

分量編碼 在對彩色電視信號進行數字化處理和傳輸是,一種常用的方式是分別對其3個分量(Y,R-Y,B-Y)進行數字化編碼。這就是分量分量編碼,另外還有全信號編碼,全信號編碼是對彩色全電視信號直接進行…

FFMPEG解碼多線程

FFMPEG多線程解碼 FFMPEG多線程編碼器一般以在Slice內分功能模塊進行多線程編碼,如h263,h263P,msmpeg(v1, v2, v3),wmv1。包含以下幾個線程:(1)Pre_estimation_motion_thread運動估計前的準備;(2)Estimation_motion_t…

SpringNBoot日志配置

市面上的日志框架 日志門面 (日志的抽象層)日志門面 (日志的抽象層)JCL(Jakarta Commons LoggingSLF4j(Simple Logging Facade for Java) jboss-loggiJUL(java.util.logging&#x…

ffmpeg的內部Video Buffer管理和傳送機制

本文主要介紹ffmpeg解碼器內部管理Video Buffer的原理和過程,ffmpeg的Videobuffer為內部管理,其流程大致為:注冊處理函數->幀級釋放->幀級申請->清空。 1 注冊get_buffer()和release_buffer() FFAPI_InitCodec() avcodec_alloc_c…