1. 程式人生 > >1. java快取-多級快取概述

1. java快取-多級快取概述

java快取

##什麼是快取

  • Cache是高速緩衝儲存器一種特殊的儲存器子系統,其中複製了頻繁使用的資料以利於快速訪問。

  • 凡是位於速度相差較大的兩種硬體/軟體之間的,用於協調兩者資料傳輸速度差異的結構,均可稱之為Cache8。

從開發的角度看,快取就是用來減少我獲取資料時間的東西

為什麼要使用快取

列表展示不同儲存方式,獲取快取的時間

獲取路徑 耗時
從資料庫讀取(硬碟/磁碟) 十幾毫秒
從遠端分散式快取讀取(記憶體+網路) 0.5毫秒
從記憶體中讀取1M資料 十幾微妙

通過上述表格,不同的資料獲取方式,耗時存在量級的差距,因此使用快取是必要的,尤其是頻繁讀取的資訊資料

##快取型別
根據快取資料的儲存位置,把快取分為:程序內快取、程序外快取,也可以看做一級快取、二級快取。

###程序內快取:

a 可以看做該快取和程式在同一臺電腦/伺服器中,即:java虛擬機器的記憶體中,你的程式部署到哪臺伺服器,那麼該快取就在哪臺伺服器中。
b 程序內快取,因為每臺伺服器都會有資料的快取,那麼就存在記憶體浪費,每臺機器都對同一份資料進行快取。
c 因為每臺伺服器都對同一份資料進行快取,那麼就存在不同伺服器間,資料不一致的問題。
d 常見的程序內快取示例:List、Map、guava cache、ehcache等。

程序外快取

a 快取資料不在本伺服器中(本伺服器的程序中沒有進行資料快取,因此稱為程序外快取),而是在專門的快取伺服器中。
b 因為需要訪問程序外的快取,因此存在其他消耗,例如:網路消耗、序列化消耗等。
c 因為是大家同一請求訪問程序外快取,因此不存在資料一致性的問題。
d 又因為快取只有一臺,所以存在快取服務宕機,所有的快取都無法訪問,因此可以考慮叢集。
e 常見的程序外快取有:redis,memcache,ehCache。

通過上述:程序內快取就是我們常用的儲存在java虛擬機器記憶體的快取資料;程序外快取就是有專門的快取伺服器(快取資料也是儲存在記憶體中),對外提供統一的快取。