我們在開發的日常工作中,經常會碰到各種緩存,最常見的莫過於瀏覽器緩存,經常需要強刷新才能看到頁面被修改的結果。這是瀏覽器的緩存策略,某些頁面你刷新多次,如果你會使用firebug或ie9的網頁開發工具(F12)或chrome自帶的開發工具(Ctrl+Shift+c)或httpwatch的話,你可以觀察network一項,來看所有的http請求的狀況,如果被緩存的話,status就不是200,而是304(not modified),這樣你的服務器就不會接收這個請求。一般靜態資源(圖片、js、css、html)都會被緩存起來。
還有就是DataSet(ADO.NET裏的類,非.NET程序員可能不清楚)。DataSet是ADO.NET相對於ADO的亮點之一。他亮就亮在不需要一直與數據庫連接。他是先把數據讀取出來放入DataTable裏,然後由程序員針對DataTable做數據處理。這麼做的目的就是不佔用數據庫連接,假如用戶的每一條數據處理非常耗時,如果不用DataSet而用DataReader的話,那麼如果訪問量稍微大一些就會出現連接數過多的異常或者連接排隊過多而導致超時的異常或者數據庫非常緊張而導致所有查詢都是慢查詢的糟糕情況。所以這個DataSet也是緩存的概念,雖然可能僅僅是短短的一個方法的生命週期,但其思想沒變。
理解了緩存的意思,那麼該如何使用緩存?我們先思考下什麼樣的數據可以緩存或需要緩存?一般來說是比較常用的數據,公共的數據需要緩存。常用是相對於程序說來,比如網站的配置信息,到處都需要調用,最好緩存起來。公共是相對瀏覽者來說,某個瀏覽者的私有信息是不適合放入緩存的,比如賬戶信息,這些一般用Session來存放。事實上,Session也是緩存,Session的值存放於服務端的內存裏,而每個Session對應一個SessionID,SessionID的信息存放於客戶端的cookie裏。程序每次調用Session的值時,先要從瀏覽器發送的cookie裏找到一個SessionID,然後再從內存裏找對應該ID的Session值,所以來說Session也是緩存。但我說是公共數據是因爲在我們未來講到的所使用的緩存裏,不適合存放相對用戶的私有數據。
從CSDN的博客來說,相對於瀏覽者的公共信息,有博客的資料、側邊欄、文章、評論,除了瀏覽者自己的信息外,貌似都是公共信息。那都要緩存嗎?那就是要看緩存的必要性。假如不是CSDN,而是一個訪問量不高的個人博客,如果把公共數據都緩存起來,難免有些自找麻煩的感覺。因爲訪問量不大,就是都緩存,這個性能的提升也是毫無意義的,而且從開發的角度來講,增加了大量的工作(每增加、修改、刪除都會牽扯到緩存的更新),但對於CSDN來講,如果不緩存,或許數據庫早就支撐不住掛掉了。可見緩存也是把雙刃劍,用的好壞全看項目的需求。
今天就先開個引子,後面我會對博客案例的緩存架構進行分析,各種緩存技術和策略一一道來。喜歡的盆友們不要錯過。