織夢(mèng)教育咨詢企業(yè)網(wǎng)站模板sem什么意思
目錄
一、簡(jiǎn)介
二、特性(優(yōu)點(diǎn))
?三、使用場(chǎng)景
一、簡(jiǎn)介
- 內(nèi)存中存儲(chǔ)數(shù)據(jù)的中間件,用于數(shù)據(jù)庫(kù),數(shù)據(jù)緩存,在分布式系統(tǒng)中能夠大展拳腳
中間件:應(yīng)用程序可以直接從 Redis 中獲取數(shù)據(jù),而不必頻繁地訪問(wèn)數(shù)據(jù)庫(kù)
二、特性(優(yōu)點(diǎn))
- 在內(nèi)存中存儲(chǔ)數(shù)據(jù)
- MySQL主要通過(guò)“表”來(lái)存儲(chǔ)組織數(shù)據(jù)“關(guān)系型數(shù)據(jù)庫(kù)”
- Redis主要通過(guò)“鍵值對(duì)”來(lái)存儲(chǔ)組織數(shù)據(jù),“非關(guān)系型數(shù)據(jù)庫(kù)”
key都是String,value則是數(shù)據(jù)結(jié)構(gòu)
- 可編程的
- 可以通過(guò)簡(jiǎn)單的交互式命令/腳本方式操作Redis
- 可拓展的
- 可以通過(guò)C,C++等語(yǔ)言去擴(kuò)展Redis功能(本質(zhì)就是一個(gè)動(dòng)態(tài)鏈接庫(kù)),讓Redis支持更多的數(shù)據(jù)結(jié)構(gòu),以及更多的命令
DLL(動(dòng)態(tài)鏈接庫(kù)):就像一個(gè)工具包,里面有很多的函數(shù)和資源,可以根據(jù)自己的需要獲取
- 可以通過(guò)C,C++等語(yǔ)言去擴(kuò)展Redis功能(本質(zhì)就是一個(gè)動(dòng)態(tài)鏈接庫(kù)),讓Redis支持更多的數(shù)據(jù)結(jié)構(gòu),以及更多的命令
- 持久化
- Redis存儲(chǔ)數(shù)據(jù)內(nèi)存為主,硬盤為輔
雖然內(nèi)存的數(shù)據(jù)是“易失”的(進(jìn)程退出/系統(tǒng)重啟),但是硬盤中備份了數(shù)據(jù),使Redis的內(nèi)存恢復(fù)到重啟前的狀態(tài)
- Redis存儲(chǔ)數(shù)據(jù)內(nèi)存為主,硬盤為輔
- 支持集群
- 一個(gè)Redis能夠存儲(chǔ)的數(shù)據(jù)是有限的(內(nèi)存空間有限),引入多個(gè)主機(jī),部署多個(gè)Redis節(jié)點(diǎn),每個(gè)Redis存儲(chǔ)數(shù)據(jù)的一部分
作為分布式系統(tǒng)的中間件,這個(gè)特性很關(guān)鍵
- 一個(gè)Redis能夠存儲(chǔ)的數(shù)據(jù)是有限的(內(nèi)存空間有限),引入多個(gè)主機(jī),部署多個(gè)Redis節(jié)點(diǎn),每個(gè)Redis存儲(chǔ)數(shù)據(jù)的一部分
- 高可用
- 冗余/備份
Redis自身支持“主從”結(jié)構(gòu)的,從節(jié)點(diǎn)就相當(dāng)于主節(jié)點(diǎn)的備份了
- 冗余/備份
- 速度快
- 這個(gè)快是相對(duì)MySQL而言的
如果是和內(nèi)存中的操作變量相比,就慢(比如抖音視頻中的點(diǎn)贊個(gè)數(shù),是選redis存還是hashmap(hashmap直接操作內(nèi)存,redis還得先通過(guò)網(wǎng)絡(luò),再操作內(nèi)存)
- 這個(gè)快是相對(duì)MySQL而言的
?三、使用場(chǎng)景
- 1)作為數(shù)據(jù)庫(kù)
- 雖然一般數(shù)據(jù)存儲(chǔ)考慮”大“,但是有些情況考慮的是”快“
Redis存儲(chǔ)的可以是全量的數(shù)據(jù),不能隨便丟失(需要不少的硬件資源)
- 雖然一般數(shù)據(jù)存儲(chǔ)考慮”大“,但是有些情況考慮的是”快“
- 2)緩存
- MySQL存數(shù)據(jù)大且慢,把熱點(diǎn)數(shù)據(jù)拎出來(lái),存在Redis中
這個(gè)時(shí)候Redis存儲(chǔ)的是部分?jǐn)?shù)據(jù),全量數(shù)據(jù)還是以MySQL為主,哪怕Redis數(shù)據(jù)沒(méi)了,還可以從MySQL這邊加載出來(lái)
- Q1:由于分布式系統(tǒng),當(dāng)?shù)卿浐笤诘谝粋€(gè)服務(wù)器存儲(chǔ)了session后,第二次登錄,可能訪問(wèn)第二臺(tái)服務(wù)器,就找不到session,只能重復(fù)登錄,直到找到對(duì)應(yīng)的session
- 解決方法1:想辦法讓負(fù)載均衡器,把同一個(gè)用戶的請(qǐng)求始終打到同一個(gè)機(jī)器上(不能輪詢了,而是要通過(guò)userId之類的方式來(lái)分配機(jī)器
- 解決方法2:把會(huì)話數(shù)據(jù)單獨(dú)拎出來(lái),放到一組獨(dú)立的機(jī)器上存儲(chǔ)(Redis)
應(yīng)用程序重啟了,會(huì)話不會(huì)丟失
- MySQL存數(shù)據(jù)大且慢,把熱點(diǎn)數(shù)據(jù)拎出來(lái),存在Redis中
- 3)消息隊(duì)列(服務(wù)器)
- 基于這個(gè)可以實(shí)現(xiàn)一個(gè)網(wǎng)絡(luò)版本的生產(chǎn)者消費(fèi)者模型
分布式系統(tǒng)來(lái)說(shuō),服務(wù)器和服務(wù)器之間,也是需要生產(chǎn)者消費(fèi)者模型的- 優(yōu)勢(shì)
- 解耦合
- 削峰填谷
- 優(yōu)勢(shì)
- 基于這個(gè)可以實(shí)現(xiàn)一個(gè)網(wǎng)絡(luò)版本的生產(chǎn)者消費(fèi)者模型
- Redis不能做的事
- 存儲(chǔ)大規(guī)模的數(shù)據(jù)
🔥面試題:為什么Redis快?
- 存儲(chǔ)在內(nèi)存中,比訪問(wèn)硬盤的數(shù)據(jù)庫(kù)要快很多
- 核心功能都是簡(jiǎn)單的邏輯,操作內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)即可
- 從網(wǎng)絡(luò)的角度,使用了IO多路復(fù)用的方式(即epoll)
就是使用一個(gè)線程,管理很多個(gè)socket- 使用單線程模型(更高版本引入了多線程),減少了不必要的線程競(jìng)爭(zhēng)開(kāi)銷
多線程通過(guò)效率的前提是CPU密集型任務(wù),使用多線程可以充分利用CPU多核資源,但是Redis核心任務(wù):操作內(nèi)存的數(shù)據(jù)結(jié)構(gòu),不會(huì)吃很多CPU