计算机网络中缓存技术,编程达人
計算機緩存也就是通常說的Cache,對計算機編程有所了解的應該都知道,緩存常與Redis聯(lián)系在一起,但是Redis僅僅是應用中的一部分。
1、瀏覽器緩存
瀏覽器面對的問題是網(wǎng)絡訪問的速度遠遠低于本地訪問的速度,每次都訪問造成網(wǎng)絡開銷太大,于是就增加了一個中間層:開辟“緩存”區(qū)域,緩存JS, HTML, CSS,圖片等各種文件。瀏覽器遵循一定的規(guī)則來判斷什么時候用緩存中的文件,什么時候去訪問服務器的新文件。在服務器發(fā)給瀏覽器的響應中,有expires, max-age, last-modified等,Header, expires 和 max-age 定義了一個資源的過期時間, last-modified和Etag用來檢查一個資源在服務器端有沒有變化。
瀏覽器緩存示意圖
流程如下:
地址欄中輸入網(wǎng)址,按回車以后瀏覽器會使用Expires,max-age來查看本地緩存的內(nèi)容是否失效,如果沒有,就直接使用 。
瀏覽器刷新按鈕的時候瀏覽器不再考慮Expires,max-age, 而是把Last-Modified / ETag 發(fā)到服務器去,問問服務器,這個文件有更新沒有?如果沒有,那就用本地緩存的文件,如果有更新,用服務器端最新的。
強制刷新的時候不使用任何緩存,直接向服務器發(fā)出新請求。
數(shù)據(jù)配置項
2、CDN
如果客戶端離服務器距離比較遠,網(wǎng)速會慢,體驗會差;海量的用戶給后端服務器帶來巨大壓力,所以CDN就采用了就近訪問的方案:把后端服務器的數(shù)據(jù)數(shù)據(jù)復制多份,挪到離客戶端比較近的“服務器中,不但減少了訪問的時間,還大大降低了 “中央”服務器的負載。 瀏覽器緩存和CDN是配合使用的, 瀏覽器的本地緩存失效以后,就需要向后端服務器來獲取了,但是如果系統(tǒng)有CDN,瀏覽器還可以就近訪問CDN,這樣用戶體驗就不會差。
是否使用CDN對比
3、Page Cache
操作系統(tǒng)的時間是按納秒為單位的,雖然內(nèi)存和硬盤都在同一臺機器中,沒有網(wǎng)絡開銷,但是硬盤實在是太慢,比內(nèi)存慢幾萬倍, 內(nèi)存等不及。 所以操作系統(tǒng)也增加了一個抽象層:Page cache , 把硬盤的文件緩存在其中。 幾乎所有的文件讀寫操作都依賴Page Cache,在向硬盤寫入文件的時候,并不是直接把文件內(nèi)容寫入硬盤以后才返回的,而是寫入到內(nèi)核的Page Cache就直接返回了。 當從硬盤讀取文件時,也不是直接把數(shù)據(jù)從硬盤復制到用戶態(tài)的內(nèi)存,而是先復制到內(nèi)核的Page Cache ,然后再復制到用戶態(tài)的內(nèi)存。
4、應用程序緩存
應用程序緩存大家都很熟悉, 因為數(shù)據(jù)庫訪問速度慢,無法應對大量的并發(fā)訪問,所以增加一個緩存中間層,把最火熱的數(shù)據(jù)從數(shù)據(jù)庫中取出,放到快速訪問的內(nèi)存中。應用程序的緩存也是個雙刃劍,雖然提升了訪問效率, 但帶來了很多問題:
應用程序、緩存、數(shù)據(jù)庫三者關系圖
代碼變復雜
需要處理緩存和數(shù)據(jù)庫之間的數(shù)據(jù)一致性問題
存在穿透,雪崩等問題
應用程序緩存現(xiàn)在已經(jīng)變成了分布式的集群形式,數(shù)據(jù)管理很麻煩。
5、CPU緩存
雖說內(nèi)存速度快, 可是在CPU面前,內(nèi)存也只能屈居下風,CPU比內(nèi)存快的多得多,數(shù)據(jù)和指令必須從內(nèi)存加載到CPU才能執(zhí)行, 為了解決速度匹配問題就在CPU內(nèi)增加緩存中間層,不過必須用硬件來實現(xiàn)。
CPU、CPU緩存、內(nèi)存關系圖
CPU的緩存包括L1、L2、 L3這三級Cache,把最火熱的訪問數(shù)據(jù)放入到其中。
在L1 Cache 最靠近CPU,速度最快,可以分為指令Cache (CPU要執(zhí)行的指令)和數(shù)據(jù)Cache(指令要操作的數(shù)據(jù))。 CPU Cache 和上面提到的各種Cache比起來,小得可憐,也就是幾百K到幾M。 所以這些Cache要想發(fā)揮真正的作用,必須得依賴規(guī)矩局部性原理:
時間局部性:如果程序中的某條指令一旦執(zhí)行,則不久之后該指令可能再次被執(zhí)行;如果某數(shù)據(jù)被訪問,則不久之后該數(shù)據(jù)可能再次被訪問。
空間局部性:指一旦程序訪問了某個存儲單元,則不久之后。其附近的存儲單元也將被訪問。
總結(jié)
對于數(shù)據(jù)讀寫不匹配的問題,一般的解決辦法就是增加一個空間層,用空間的冗余來換取時間的匹配,同時要遵循下列原則:
數(shù)據(jù)的讀操作遠大于寫操作
數(shù)據(jù)計算過程比較耗時
數(shù)據(jù)是某個數(shù)據(jù)源的數(shù)據(jù)備份
數(shù)據(jù)訪問遵循“局部性原理”
總結(jié)
以上是生活随笔為你收集整理的计算机网络中缓存技术,编程达人的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iframe懒加载_懒加载是如何实现的?
- 下一篇: JAVA入门级教学之(方法内存分配机制)