前面一篇文章談了一些linux系統層面的cache和buffer。這裡主要談談應用層面的那些cache。相比系統層面的cache集中在io上,應用層面的cache就顯得五花八門了。就從web說起吧。
web快取對於伺服器和客戶端都是不可或缺的。
對於web伺服器來說,快取是非常重要的東西,它可以大大的增加併發,縮短相應時間,減少伺服器負荷。原理很簡單。因為對於乙個url來說,很短時間內它的內容變化其實是不大的,如果每次請求都要伺服器算一遍就顯得太浪費了。所以web快取就是放在web伺服器前面的乙個**,它接收使用者請求,並向後端請求,在返回響應的時候將這些響應快取起來,遇到請求時不經過伺服器計算直接返回響應,從大大提高響應速度,尤其是在請求量很大的時候。web快取代表作是squid和varnish。
對於客戶端的瀏覽器來說快取同樣不可或缺。甚至在http協議中都為快取提供了支援,http返回碼304 not modified就是告訴瀏覽器,你要的內容沒變,用你快取中的吧。在http協議之外,瀏覽器自己也會做許多的快取,對於啊,js什麼的,短時間內的請求就自作主張直接不去遠端取了,會大大減少請求量,從而節省大量的時間,使用者需要速度。況且瀏覽器和伺服器本是同根生嘛,不必相互煎熬。所以有時候你得強制重新整理。
與web伺服器緊密相關的就是資料庫了。
在資料庫系統中,快取同樣無處不在。因為同樣的道理,對同乙個sql查詢來說,在某些條件下(比如它查的表自上次查詢後都沒更新過)它的結果就應該和上次查詢一樣的。於是mysql提供了query cache。也有些框架提供了快取功能,比如hibernate。這都是讀快取,目的在於讀很多,而寫比較少的時候提高讀的效能,如果寫很多,而讀比較少的話這類快取就沒什麼用了。於是,在一些情況下我們希望可以為資料庫引入寫快取。典型的是主鍵查詢和更新。於是出現了kv資料庫(比如memcached)。可以提供基於主鍵查詢的讀寫快取。這對於提高資料系統的整體效能是極其重要的。
其他五花八門的cache還有那些呢?
比如dns快取,dns快取同樣存在於客戶端和dns伺服器中,與web快取的原理是一樣的。將dns的解析結果快取起來。
比如arp快取,將arp的結果快取起來。
甚至,連編譯系統也引入了快取比如ccache,比如visual studio中的pch(預編譯頭)機制。
最後,我想說的是:cache is king! cache is everywhere!
原始出處
Cache和Buffer的區別
1.cache 快取區,是快取記憶體,是位於cpu和主記憶體之間的容量較小但速度很快的儲存器,因為cpu的速度遠遠高於主記憶體的速度,cpu從記憶體中讀取資料需等待很長的時間,而 cache儲存著cpu剛用過的資料或迴圈使用的部分資料,這時從cache中讀取資料會更快,減少了cpu等待的時間,提高了...
Buffer和Cache的區別
快取 cached 是把讀取過的資料儲存起來,重新讀取時若命中 找到需要的資料 就不要去讀硬碟了,若沒有命中就讀硬碟。其中的資料會根據讀取頻率進行組織,把最頻繁讀取的內容放在最容易找到的位置,把不再讀的內容不斷往後排,直至從中刪除。緩衝 buffers 是根據磁碟的讀寫設計的,把分散的寫操作集中進行...
Cache和Buffer的區別
1.cache 快取區,是快取記憶體,是位於cpu和主記憶體之間的容量較小但速度很快的儲存器,因為cpu的速度遠遠高於主記憶體的速度,cpu從記憶體中讀取資料需等待很長的時間,而 cache儲存著cpu剛用過的資料或迴圈使用的部分資料,這時從cache中讀取資料會更快,減少了cpu等待的時間,提高了...