Redis分布式快取實現

2022-06-05 14:24:07 字數 1749 閱讀 9685

定義

特點快取解決的問題

快取能提高效率,那專案中所有書庫加入快取是否更好?

本地快取與分布式快取的區別?

mybatis中應用級快取(二級快取)sqlsessionfactory級別快取 所有會話共享

如何開啟二級快取 ---本地快取

檢視cache標籤快取實現

自定義rediscache實現

如何解決關聯關係時更新快取資訊的問題?

//用來處理關聯關係快取

​ 例如:

通過這樣設定,任何一方有更新的話,關聯關係的快取也會清空

# 1 對放入redis中key進行優化: key的長度不能太長

1834752025:4175315364:com.longda.dao.userdao.findall:0:2147483647:select id,name,age,bir from t_user:sqlsessionfactorybean

- 通過演算法 : md5處理加密

- 特點 :

1 一切檔案字串等經過md5處理之後都會生成32為16進製制字串

2 不同內容檔案經過md5進行加密,加密結果一定不一致

- aa.txt 和 bb.txt是否相同如何判斷?

通過md5對檔案進行加密,再判斷加密後的字串是否相同

3 相同內容檔案多次經過md5生成結果始終一致

- 推薦 : 在redis整合mybatis過程中建議將key 進行md5優化處理

封裝對key進行md5處理方法

在rediscache中新增封裝乙個md5工具方法,並對快取放入/取出值進行md5加密

//自定義redis快取實現

public class rediscache implements cache

//快取獲取值

@override

public object getobject(object key)

......

//封裝乙個對key進行md5方法

public string getkeytomd5(string key)

}

# 1 什麼是快取穿透(擊穿)?

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

例如 : 使用者惡意查詢id=-1,或者id=最大值+mathron,大量訪問,資料庫可能會宕機

mybatis中cache解決了快取穿透

- 方法 : 將資料庫中沒有查詢到的結果也進行了快取.即把這個key的value賦值為null

如果此時新增了這個資料,那你的快取中還是null值呢?

- 注意:mybatis一旦執行了增刪改操作,redis快取立馬清空

# 2 什麼是快取雪崩?

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

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

- 方法 :

1 快取永久儲存 (不推薦)

2 `針對於不同業務資料一定要設定不同超時時間`

# 3 專案中有沒有遇到? 如何解決?

快取穿透:沒有遇到,因為mybatis已經解決了這個問題

分布式快取 redis實現

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

Redis實現分布式快取

1.什麼是快取 cache 定義 就是計算機記憶體中的一段資料 2.記憶體中資料特點 a.讀寫快 b.斷電立即丟失 3.快取解決了什麼問題?a.提高 吞吐量,提高 執行效率 b.核心解決問題 快取的存在是用來減輕資料庫訪問壓力 4.既然快取能提高效率,那專案中所有資料加入快取豈不是更好?注意 使用快...

Redis 分布式快取

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