7月9日 19:00-21:30 阿裡雲開發者社群首場“Offer 5000”直播開啟!14位團隊技術大牛線上招人,更有《阿裡雲技術面試紅寶書》助你拿下Offer!戳下圖或連結馬上投遞履歷:
緩存問題
對于整個電腦而言,它有一個自己的固定狀态:如果要讀取資料,流程是将硬碟上的内容直接加載到記憶體裡,而後再通過記憶體進行讀取。因為硬碟上所儲存的都是實體上的二進制資料。
如果你的電腦隻是你一個人使用,那麼沒有任何問題,如果多人使用,你就會發現電腦變得像蝸牛跑步一樣慢。你一個人在使用,慢一點或許感覺不到,一旦換到公網上,一群使用者要進行資料讀取,問題就出現了,所有的操作如果通過資料庫查詢得到(實體磁盤上),那麼速度就會非常慢。例如一個查詢需要60毫秒的時間,如果人一多就會成指數倍增長,效率會非常低。
如何減少這種操作所帶來的延遲時間的增長呢?
有人提出,不使用普通的硬碟(實體磁盤),全部換固态硬碟。然而,使用固态硬碟雖然速度可以提升,但價格也相對高,且不實用。
無法縮短記憶體與磁盤間的讀取的延遲,這個時候該怎麼辦?
解決方案是不讀取硬碟上的内容,速度就會非常快了。這種做法有三種實作模式:
1.利用檔案(CMS系統,這個系統的特點是把所有要讀的資料都生成靜态檔案,靜态頁面的加載速度很快);
2.直接使用記憶體作為緩存,也就是将所讀取進來的資料儲存在記憶體裡面(考慮資料的實效問題);
3.使用緩存資料庫,緩存資料庫有Redis、Memcached。
**對于記憶體緩存而言,有兩種常用的元件:
-oscache(主要在頁面上使用)
-ehcache(在一些開發架構中出現**)
緩存的本質是減少實體磁盤的讀取時間,直接讀記憶體,因而還需要進行合理的記憶體管理。
緩存與資料同步
使用緩存的核心意義在于減少資料庫的操作,緩存和資料庫之間有一定的内容差異。
如果要求盡可能保持緩存和資料庫同步,那麼需要思考以下幾個問題:
1.你的緩存是否為資料庫專用的緩存?
在所有的ORMapping設計元件之中都會存在有EHCache緩存元件,這個緩存元件主要目的是幫助使用者減少資料庫的處理操作,一般這樣的緩存都會有自己的回收算法,比如:FIFO、軟引用,弱引用。這些算法隻是保證緩存中不需要的内容被及時清理幹淨。如果一直被使用,那麼将被一直保留,并且這一操作隻能通過明确的代碼進行釋放。
2.你的緩存是否在進行分布式或反向代理操作時使用的?
例如:你的系統裡面配置了N多個Tomcat(web容器),這些web容器需要統一為所有的使用者服務,為了操作友善可以将圖檔或視訊等内容暫時儲存在自己本地伺服器上,一般儲存在本地伺服器上的資料都可以進行手工清空處理。
3.你的緩存是否采用了緩存資料庫完成?
Memcached、Redis,這個裡面資料儲存的内容往往不會是顯示的資料,對于緩存的資料庫,裡面儲存的内容往往都是一些高并發的資料資訊統計,對于這些資訊統計處理操作,往往會結合大資料的開發工具完成,或者在進行叢集設計的時候使用緩存資料庫進行更加友善的協調處理操作,儲存分布式伺服器上的公共資料。例如:session。
更多專業知識,面試技巧就在面試一點通,持續更新中……
感謝浏覽~
本内容來源于[阿裡雲大學-Java面試技巧
](
https://developer.aliyun.com/course/1660)