Java緩存學習之一:緩存


一、緩存

1、什么是緩存?

      緩存是硬件,是CPU中的組件,CPU存取數據的速度非常的快,一秒鍾能夠存取、處理十億條指令和數據(術語:CPU主頻1G),而內存就慢很多,快的內存能夠達到幾十兆就不錯了,可見兩者的速度差異是多么的大 ,緩存是為了解決CPU和內存兩者速度差異問題的中間媒體,將CPU訪問頻率較高的數據從內存讀入緩存,從而提高軟件執行效率。

  以上是硬件中緩存,軟件中的緩存的定義更為廣泛一些,實現的方式也更多一些,但目的是一樣的,都是復制常用的數據到內存中方便CPU的快讀讀取(注意:通過java的原理可以看出java不能操作緩存,不過可以給緩存建議存儲那些數據)。緩存的基本思想是以空間換時間。我們知道,IO的讀寫速度相對內存來說是比較慢的,通常一個web應用的瓶頸就出現在磁盤IO的讀寫上。那么,如果我們在內存中建立一個存儲區,將數據緩存起來,當瀏覽器端由請求到達的時候,直接從內存中獲取相應的數據,這樣一來可以降低服務器的壓力,二來,可以提高請求的響應速度,提升用戶體驗。

 

 

2、java項目中常用的實現緩存的發方式有哪些?

2.1 數據庫數據緩存

      一般來說,web應用業務邏輯業務邏輯比較復雜,數據庫繁多,要獲取某個完整的數據,往往要多次讀取數據庫,或者使用極其復雜效率較低的SQL查詢語句。為了提高查詢的性能,將查詢后的數據放到內存中進行緩存,下次查詢時,直接從內存緩存直接返回,提高響應效率。

比如mysql、oracle等本身的緩存機制可以實現數據緩存,有時頁面同樣的請求,后面的請求時間比第一次請求明顯短,就是數據庫數據緩存的作用,另外通過調正數據庫的字段類型和索引、序列等可以優化查詢效率。

 

2.2 應用層緩存
      應用層緩存是指我們在代碼層面上做的緩存。通過代碼邏輯,把曾經請求過的數據或資源等,緩存起來,再次需要數據時通過邏輯上的處理選擇可用的緩存的數據。應用層緩存主要針對某個業務方法進行緩存,有些業務對象邏輯比較復雜,可能涉及到多次數據庫讀寫或者其他消耗較高的操作,應用層緩存可以將復雜的業務邏輯解放出來,降低服務器壓力。

 

2.3 頁面緩存(瀏覽器緩存)
      除了IO外,web應用的另一大瓶頸就是頁面模板的渲染。每次請求都需要從業務邏輯層獲取相應的model,並將其渲染成對應的HTML。一般來說,web應用讀取數據的需求比更新數據的需求大很多,大多數情況下,某個請求返回的HTML是一樣的,因此直接將HTML緩存起來也是緩存的一個主流做法。

 

2.4 代理服務器緩存
      正向代理需要用戶瀏覽器進行配置,反向代理需要先配置DNS服務器,然后接受用戶瀏覽請求,轉發請求給遠程服務器。反向代理服務器是瀏覽器和源服務器之間的中間服務器,瀏覽器先向這個中間服務器發起Web請求,經過處理后(比如權限驗證,緩存匹配等),再將請求轉發到源服務器。代理服務器緩存的運作原理跟瀏覽器的運作原理差不多,只是規模更大。可以把它理解為一個共享緩存,不只為一個用戶服務,一般為大量用戶提供服務,因此在減少相應時間和帶寬使用方面很有效,同一個副本會被重用多次。常見的反向代理服務器:Nginx是軟件。

 

2.5 CDN緩存
      CDN( ContentDeliveryNetwork 內容分發網絡)緩存,也叫網關緩存、反向代理緩存。瀏覽器先向CDN網關發起Web請求,網關服務器后面對應着一台或多台負載均衡源服務器,會根據它們的負載請求,動態將請求轉發到合適的源服務器上。雖然這種架構負載均衡源服務器之間的緩存沒法共享,但卻擁有更好的處擴展性。CDN是一集群服務器網絡,不是軟件。

 

2.6 基於spring的緩存

spring作為一個成熟的java web 框架,自身有一套完善的緩存機制,同時,spring還未其他緩存的實現提供了擴展。接下來,讓我們在一個簡單的學生管理系統中嘗試spring的數據庫緩存、應用層緩存、頁面緩存的實現。

 

 

參考:

https://zhuanlan.zhihu.com/p/20885740

http://blog.clzg.cn/blog-248258-814385.html

http://wenku.baidu.com/link?url=2_LqZF0lkuipJYsx_42e6DDvMSdCoxgy3rWKsPzSi-tktlUcGffa0dSG3vdhAEVs4BxAFfCEJwvA6XxjNSKrnUhh2OPpbl_IiipUvehSiWK

(JCS)http://wenku.baidu.com/link?url=hI7n10NVXGL2nFU1J66yltuhA_illv_7N4OEykd_anOqeGFZpHRY4ENEgNBWddBOyPA1hfbem7-EZ8v8oGcbaogKRWb3CLduIwkPcefk0fa


免責聲明!

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



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