1. 程式人生 > 資料庫 >38.mybatis快取是什麼?快取存在的問題有哪些?嘻哈的簡寫筆記——Redis

38.mybatis快取是什麼?快取存在的問題有哪些?嘻哈的簡寫筆記——Redis

1.之前的mybatis快取是什麼?

本地快取;

我們之前的快取是本地快取!就是mybatis把需要快取的資料給載入到裝有MySQL的資料庫的計算機的記憶體(存到了SQLSessionFactory裡)中;redis快取不是本地快取,因為redis快取資料時,redis和MySQL不在同一臺計算機上;

2.快取存在的問題有哪些?

(1)快取穿透:如果使用者在搜尋的時候輸入了一個我們資料庫中沒有的ID,(資料庫中沒有快取redis中自然沒有),而且進行多次重複的查詢;大量的請求肯定先找快取,但是快取沒有所以就會去找資料庫,而資料庫承受不住,就會崩潰!!!
如何解決:一、在快取中給ID設定區間,如果不在這個區間內的ID,redis是不會給你查的;二、在redis中放一個id的最大最少值,超出不給查;三、獲取客戶端的Ip地址,限制他們的訪問頻次;

(2)快取擊穿:正常時間內快取中的熱點資料突然到期了,大量的請求在快取中找不到了,只好去找Mysql所以造成了MySql的崩潰!!!
如何解決:一、新增一個鎖,在訪問快取中沒有的資料時,限制訪問資料庫的請求的數量;避免宕機;二、把熱點資料的生存時間去掉;變成永久;

(3)快取雪崩:在一個時間內大量的快取同時過期;最終大量的請求只能像雪崩似的訪問資料庫,造成宕機!
如何解決:一、設定過期時間時,key的過期時間要隨機一些,7分鐘12分鐘多一些;

(4)快取傾斜:因為負載均衡時看似請求均分,但是熱點資料集中在那幾個點上了;導致無法承受;也就是有某個熱點訪問量太多了;reids宕機了;
如何解決:一、擴充套件架構,多搭建幾個節點,緩解壓力;二、tomcat中做快取,也就是把Tomcat中的快取也利用起來,查詢reids之前先查Tomcat的快取;

。。。。。。。。。。。。。

嘻哈的簡寫筆記

。。。。。。。。。。。。。