redis自學(41)JVM程序快取

蓝海的bug本發表於2024-05-06

前置資料庫的表規劃:資料庫的表儘量做分離,是因為一個商品的資料事實上是非常多的,需要對商品的資料進行解耦,欄位太多查詢的效率會比較低;另一方面,系統需要給資料加快取,如果都在一張表裡,那麼作為快取的話,就只有一整條資料作為快取,一旦一條資料裡的任意一個欄位做了修改,整個商品的快取就全都失效了,這樣快取失效的頻率太高了,導致快取經常性的未命中,隨意要資料分離,把經常修改的和不經常修改的分開,做成好幾張表,好幾個不同的快取

商品的查詢頁面需要放在反向代理的Nginx伺服器中(充當靜態資源伺服器),而頁面需要的資料透過ajax想服務端(nginx業務叢集)查詢

反向代理配置

本地程序快取

快取在日常開發中啟至關重要的作用,由於是儲存在記憶體在,資料的讀取速度是非常快的,能大量減少對資料庫的訪問,減少資料庫的壓力。我們把快取分為兩類:

分散式快取,例如reids

優點:儲存容量更大、可靠性更好、可以在叢集間共享

缺點:訪問快取有網路開銷

場景:快取資料量較大、可靠性要求較高、需要在叢集間共享

程序本地快取,例如HashMapGuavaCache:

優點:讀取本地記憶體,沒有網路開銷,速度更快

缺點:儲存容量有限、可靠性較低、無法共享

場景:效能要求較高,快取資料量較小

Caffeine是一個基於Java8開發的,提供了近乎最佳命中率的高效能 的本地快取庫。目前Spring內部的快取使用的就是Caffeine

下圖是工作效率

驅逐策略

在預設情況下,當一個快取元素過期的時候,Caffeine不會自動立即將其清理和驅逐。而是在一次讀或寫操作,或者在空閒時間完成對失效資料的驅逐。

測試:

定義兩個快取

注入兩個cache物件

方法進行修改

之後的操作,第一次肯定是要查詢資料庫的,同時寸入了快取,第二次就發現沒有走資料庫了,而是走快取。

相關文章