企業(yè)網(wǎng)站建立網(wǎng)絡(luò)虛擬社區(qū)時(shí)對(duì)于企業(yè)成品短視頻網(wǎng)站源碼搭建
- Redis是什么
- Redis數(shù)據(jù)類型
- Redis應(yīng)用場(chǎng)景
- 緩存
- 計(jì)數(shù)器
- 分布式會(huì)話
- 排行榜
- 最新列表
- 分布式鎖
- 消息隊(duì)列
- Redis出現(xiàn)的問(wèn)題
- 穿透
- 擊穿
- 雪崩
- Redis為什么速度快
Redis是什么
redis是一種高速緩存數(shù)據(jù)庫(kù)
Redis數(shù)據(jù)類型
string
hash
list
set
zset
Redis應(yīng)用場(chǎng)景
緩存
Redis作為緩存層,MySQL作為存儲(chǔ)層,絕大部分請(qǐng)求的數(shù)據(jù)都是從Redis中獲取,由于Redis具有支撐高并發(fā)的特性,所以緩存通常能起到加速讀寫和降低后端壓力的作用
計(jì)數(shù)器
使用Redis作為計(jì)數(shù)的基礎(chǔ)工具,它可以實(shí)現(xiàn)快速計(jì)數(shù)、查詢緩存的功能,同時(shí)數(shù)據(jù)可以異步落地到其他數(shù)據(jù)源
分布式會(huì)話
一個(gè)分布式Web服務(wù)將用戶的Session信息(例如用戶登錄信息)保存在各自服務(wù)器中,這樣會(huì)造成一個(gè)問(wèn)題,出于負(fù)載均衡的考慮,分布式服務(wù)會(huì)將用戶的訪問(wèn)均衡到不同服務(wù)器上,用戶刷新一次訪問(wèn)可能會(huì)發(fā)現(xiàn)需要重新登錄,這個(gè)問(wèn)題是用戶無(wú)法容忍的
為了解決這個(gè)問(wèn)題,可以使用Redis將用戶的Session進(jìn)行集中管理,在這種模式下只要保證Redis是最高可用和擴(kuò)展性的,每次用戶更新或者查詢登錄信息都直接從Redis中集中獲取
排行榜
使用有序set可以做一個(gè)排行榜。例如視頻網(wǎng)站需要對(duì)用戶上傳的視頻做排行榜,榜單的維度可能是多個(gè)方面的:按照時(shí)間、按照播放數(shù)量、按照獲得的贊數(shù)
最新列表
依賴list的數(shù)據(jù)具有順序的特征對(duì)信息進(jìn)行管理
使用隊(duì)列模型解決多路信息匯總合并的問(wèn)題
使用棧模型解決最新消息的問(wèn)題
分布式鎖
想要實(shí)現(xiàn)分布式鎖,必須要求Redis有【互斥】的能力,我們可以使用SETNX命令,這個(gè)命令表示SET if Not Exists,即如果key不存在,才會(huì)設(shè)置它的值,否則什么也不做
兩個(gè)客戶端進(jìn)程可以執(zhí)行這個(gè)命令,達(dá)到互斥,就可以實(shí)現(xiàn)一個(gè)分布式鎖
消息隊(duì)列
Redis 中l(wèi)ist的數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)是雙向鏈表,所以可以非常便捷的應(yīng)用于消息隊(duì)列(生產(chǎn)者 / 消費(fèi)者模型)。消息的生產(chǎn)者只需要通過(guò)lpush將消息放入 list,消費(fèi)者便可以通過(guò)rpop取出該消息,并且可以保證消息的有序性
Redis出現(xiàn)的問(wèn)題
穿透
緩存穿透
:指在redis緩存中不存在數(shù)據(jù),這個(gè)時(shí)候只能去訪問(wèn)持久層數(shù)據(jù)庫(kù),當(dāng)用戶很多時(shí),緩存都沒(méi)有命中就會(huì)照成很大壓力
解決方案
:
(1)布隆過(guò)濾器(對(duì)可能查詢的數(shù)據(jù)先用hash存儲(chǔ))
(2)緩存空對(duì)象:在沒(méi)有的數(shù)據(jù)中存一個(gè)空,而這些空的對(duì)象會(huì)設(shè)置一個(gè)有效期)
擊穿
緩存擊穿
:指在同一個(gè)時(shí)間內(nèi)訪問(wèn)一個(gè)請(qǐng)求的請(qǐng)求數(shù)過(guò)多,而在這個(gè)時(shí)候緩存某個(gè)key失效了,這個(gè)時(shí)候就會(huì)沖向數(shù)據(jù)庫(kù)照成緩存擊穿
解決方案
:
(1)設(shè)置緩存永遠(yuǎn)不過(guò)期
(2)加互斥鎖,使用分布式鎖,保證每個(gè)key只有一個(gè)線程去查詢后端服務(wù),而其他線程為等待狀態(tài)。這種模式將壓力轉(zhuǎn)到了分布式鎖上
雪崩
緩存雪崩
:在某個(gè)時(shí)間段,緩存集體過(guò)期、redis宕機(jī)
解決方案
:給key的失效時(shí)間設(shè)置為隨機(jī)時(shí)間,避免集體過(guò)期;雙緩存;加互斥鎖
Redis為什么速度快
1.redis是基于內(nèi)存
的,內(nèi)存的讀寫速度非???/p>
2.redis是單線程
的,省去了很多上下文切換線程的時(shí)間
3.redis使用多路復(fù)用
技術(shù),可以處理并發(fā)的連接