Redis實現分布式快取

2022-06-22 06:45:08 字數 2274 閱讀 3640

1. 什麼是快取(cache)

定義:就是計算機記憶體中的一段資料;

2. 記憶體中資料特點

a. 讀寫快    b. 斷電立即丟失

3. 快取解決了什麼問題?

a. 提高**吞吐量,提高**執行效率;

b. 核心解決問題:快取的存在是用來減輕資料庫訪問壓力;

4. 既然快取能提高效率,那專案中所有資料加入快取豈不是更好?

注意:使用快取時一定是資料庫中資料極少發生修改,更多用於查詢這種情況例如:省份  城市  縣  村

5. 本地快取和分布式快取的區別

本地快取:儲存在當前應用伺服器記憶體中的資料稱之為本地快取(local cache)

分布式快取:儲存在當前應用伺服器記憶體之外的資料稱之為分布式快取(distribute cache)

集群:將同一種服務的多個節點放在一起,共同對系統提供服務的過程稱之為集群(cluster)

分布式:有多個不同服務集群共同對系統提供服務的這個系統稱之為分布式系統(distribute system)

6. 利用 mybatis 自身本地快取結合 redis 實現分布式快取

a. mybatis 中應用級快取(二級快取)sqlsessionfactory 級別快取,所有會話共享同乙個 namespace

b. 如何開啟(二級快取)

---- 本地快取

c. 檢視 cache 標籤快取實現

結論:mybatis底層預設使用的是:org.apache.ibatis.cache.impl.perpetualcache 實現【底層就是乙個 map 資料結構儲存】

d. 自定義 rediscache 實現,替換預設的 perpetualcache 

(1)通過 mybatis 預設 cache 原始碼得知,可以只用自定義 cache 介面的實現類 implements cache 介面,並對裡面的方法進行實現

public class rediscache implements cache

1. 快取在專案中應用

a. 如果專案中表查詢之間沒有任何關聯查詢時,使用現在的這種快取方式沒有任何問題,比如:只是使用單錶查詢;

b. 現有快取方式在表連線查詢過程中一定存在問題;比如:depart 部門中有 多個 user 使用者,depart

mybatis 快取 cache】

用來將多個有關聯關係查詢快取放在一起處理;

(1)關聯關係快取處理【用來將兩個關聯關係查詢的結果快取放在一起處理】

(2)存在關聯關係的多個模組中,只要有乙個模組更新,就應該把有關聯的模組快取都清空,否則會出現髒資料情況;

(3)此時不能使用【只適合單模組的快取】 要使用 標籤;

當前模組的快取去引用其他模組的快取【使用者模組的查詢快取放入部門模組的查詢快取中】

1. 快取優化策略

a. 對放入 redis 中 key 進行優化:key 的長度不能太長;

b. 盡可能將 key 設計簡潔一些:

演算法:md5處理 加密

特點:(1)一切檔案字元字串等經過md5加密處理後,都會生成32位16進製制字串;(2)不同內容檔案經過md5進行加密,加密結果一定不一致;

(3)相同內容檔案多次經過md5加密生成的結果始終一致;

推薦:在 redis 整合 springboot 過程中建議將 key 進行 md5 加密優化處理;

2. 面試相關概念

a. 什麼是快取穿透 擊穿

定義:客戶端查詢了乙個資料庫中沒有的資料記錄,導致快取在這種情況下無法使用,稱之為快取穿透  快取擊穿

mybatis 中 cache 解決了快取穿透問題:將資料庫中沒有查詢到的結果也進行快取

b. 什麼是快取雪崩

定義:在系統執行的某一時刻,突然系統中快取全部失效,恰好在這一時刻湧來大量客戶的請求,導致所有模組快取無法使用,大量請求湧向資料庫導致極端情況,資料庫阻塞獲取掛起;

快取儲存時:業務系統非常大,模組多,業務資料不同,不同模組在放入快取時,都會設定乙個快取超時時間;

解決方案:1. 快取永久儲存(不推薦) 2. 針對於不同業務資料一定要設定不同超時時間,避免同一時刻 或者 一極短時間內大量快取失效。

Redis分布式快取實現

定義 特點快取解決的問題 快取能提高效率,那專案中所有書庫加入快取是否更好?本地快取與分布式快取的區別?mybatis中應用級快取 二級快取 sqlsessionfactory級別快取 所有會話共享 如何開啟二級快取 本地快取 檢視cache標籤快取實現 自定義rediscache實現 如何解決關聯...

分布式快取 redis實現

為什麼要做分布式快取?即應用場景 1 需要用到快取,但是應用又分布在不同的機器上,也就是會有資料一致性的問題,分布式快取可以解決這個問題。2 快取量很大,本地快取或者單個redis之類的快取應用無法支撐 3 提供分布式鎖 什麼是分布式快取?分布式和集群 分布式經常與集群進行區分,兩者的特點都是整個系...

Redis 分布式快取

1 官網 3 菜鳥教程 4 redis的集群教程 5 史上最全redis高可用技術解決方案大全 一 redis的特點?redis 本質上是乙個 key value 型別的記憶體資料庫,很像 memcached,整個 資料庫統統載入在記憶體當中進行操作,定期通過非同步操作把資料庫資料 flush 到硬...