深入理解Redis概念(精)
Redis:
是nosql , key-value ,可持久化,分散式,記憶體,快取的非關係型資料庫
有人問你什麼是Redis你就上面這句話,詳細解釋分為四部分解釋:
1.nosql , key-value ,非關係型資料庫
nosql:not only structured query language(不僅僅是支援結構化的查詢語言)
這裡就要談到兩個概念:
結構化資料和非結構化資料
一類相同特點的資料集合叫結構化資料,例如建立的student表
海量的資料指的都是非結構化資料,例如:大資料
------這兩類資料化結構對應的資料儲存也分為兩類------
關係型資料庫(oracle,mysql)和
關係型資料庫儲存的都是結構化資料
非關係型資料庫儲存的可以是結構化資料也可以是非結構化資料
------非關係型資料庫儲存非結構化資料是以key-value形式------
2.可持久化,記憶體
記憶體儲存資料的缺點:
1.存的量少(解決方法:採用分散式和海量叢集)
2.容易丟失,如果快取中的資料由於記憶體斷電丟失,會造成快取的擊穿和雪崩
一旦出現雪崩,整個系統將會進入癱瘓狀態,所以需要一個能支援持久化能力的快取技術
(雪崩/快取擊穿的概念:
Redis在之前佔領市場時使用一種效能非常高的分散式快取技術:memoryCache
但是這種技術不支援記憶體資料的持久化,容易出現由於系統故障造成的快取雪崩
例如:海量資料的請求訪問,雙十一,如果資料的訪問由於快取的未命中,也就是這麼多資料請求你快取中沒有或者由於記憶體資料丟失等原因,那麼這些請求會湧入資料庫,資料庫承受不住這麼多的請求就會導致叢集宕機,海量的請求並不會消失,造成資料庫宕機-重啟-系統不可用
所以需要持久化的能力,保證記憶體資料丟失的時候,叢集大部分節點的資料依然可以命中
memoryCache和Redis對比:
效能:差不多
可持久化:Redis支援memoryCache不支援
快取的資料結構:Redis非常豐富(String,list,set,zset),memoryCache只支援String
)
所以如果Redis支援記憶體資料進行寫入磁碟的操作,那麼宕機時資料就能恢復,具有容災能力.
3.快取
Redis使用快取功能解決系統性能問題
在SSM框架中,我們可以在資料庫,持久層,業務層,控制層中都可以加快取
資料庫快取:利用key-value結構記錄快取內容,同一個sql語句是一個key值,下次相同的執行(查詢)語句,就使用快取中的,不用再去封裝resultSet集合,減少了資料磁碟的IO
持久層快取:減少了連線資料庫的次數,減少resultSet封裝成物件的過程
控制層和業務層快取:減少資料的傳遞次數
我們使用Redis在業務層引入Redis程式碼實現資料的讀寫
4.分散式結構
多節點的Redis叢集搭建(資料分片)
(個人學習總結,轉載註明出處,如有錯誤請及時指出,謝謝!)