【案例討論】從案例引發的對緩存設計的思考,干貨討論,絕對不玩虛的


主題:從案例引發的對緩存設計的思考

背景: 談到性能優化,勢必要談到緩存架構的設計與使用。幾乎是所有人都知道緩存的威力,但是知道終歸只是知道,如何真正合理的在自己的項目中進行使用,又是另外一回事了。我們團隊為不少的公司的項目進行了性能與架構的優化,遇到了不少由於誤用,濫用緩存帶來的問題,這些項目的緩存不僅沒有使得性能進行提示,反而成為了性能瓶頸。

緩存的使用,沒有定論,沒有所謂“一定,必須等XXX這樣”,沒有這樣的金科玉律,一切都是“根據項目的實際情況而定”,但是,我們看到的情況並不是這樣的,我們也問過很多的人,回答讓我們吃驚“上網大家都這樣的用的啊,XXX就應該是這樣的啊”。機械式的照搬,不帶頭腦的瞎用,結果可想而知。我們本次的討論,是實實在在的干貨的討論,會給出一些常用的策略和場景,大家可以根據情況使用,希望是“授之以漁”,而不是生搬硬套。

 討論大綱:
        不同項目中,你認為在哪里可以使用緩存(例如。以Web項目為例子)
        緩存的策略是什么
        如何設計比較智能的緩存
        緩存中數據以及不同數據帶來的性能問題
        常見的緩存誤區

 

 

這樣吧,我先開個頭,大家可以一起參與!
我首先說說在項目中可以使用緩存的地方。

我這里用一個圖可能表述的更加清楚!
如圖:
20120517095429.png

 

 

 

 

 

既然我們談緩存這個話題,那么我們就把這個話題談細致一點,因為很多時候:談大帽子的話很多人都會滔滔不絕,但是一到真實的細節與落實的地方,很多人就偃旗息鼓了,呵呵 有點”吹起來,天下無敵;做起來,一無是處“的感覺。

我們首先就來看看瀏覽器的緩存。
這個好搞啊,做過網站的朋友都知道,這個設置主要就是通過設置:Cache-Control 這個響應頭來實現的,如下:
20120517100234.png

 



不同的技術平台,實現的方式不一樣,大家也不要糾結這些平台的差異,只要最后結果是一樣的就OK了,要懷着包容心去看每一種技術,如果連技術的差異性都無法容忍,未必也太小家子氣了,呵呵呵。

例如,在微軟技術的ASP.NET中,可以通過幾種方式來實現:
1.頁面中設置,如下:
20120517100540.png



2.代碼中設置,如下:
20120517100619.png



3.IIS中設置,如下:
20120517100705.png

 

 

瀏覽器緩存可以緩存圖片,js,css,當然,還可以把一些數據,通過js對象的形式保存在瀏覽器中。

瀏覽器緩存的問題主要在於圖片,js,css的更新上面。

例如如果我們設置了緩存的時間為1一個月,那么這些資源很有可能就在一個月還沒有到就因為我們發布新的版本而更新了。這個時候,瀏覽器不會知道的,還是會使用老的版本。
這不是我們希望看到的,解決的辦法也是很簡單,如果大家留心點,就會發現很多的站點的js,css是這樣命名的:XXX-1.2.js

這就是通過版本控制來來使得瀏覽器重新下載新的資源。

 

 

 

內容太多,更多請參看:http://www.agilesharp.com/Forum.aspx/t-17

http://bbs.chinaunix.net/thread-3744450-1-1.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM