柚子快報(bào)邀請碼778899分享:Java面試 redis 篇
柚子快報(bào)邀請碼778899分享:Java面試 redis 篇
Java面試 redis 篇
redis的使用場景:
緩存,分布式鎖,計(jì)數(shù)器,保存token 消息隊(duì)列,延遲隊(duì)列
項(xiàng)目中真實(shí)使用過的redis 緩存:緩存三兄弟(穿透,擊穿,雪崩) 雙寫一致 ,持久化,數(shù)據(jù)過期策略,數(shù)據(jù)淘汰策略, 分布式鎖:setnx redisson 消息隊(duì)列 延遲隊(duì)列
如果發(fā)生了 緩存的穿透 擊穿 雪崩 該如何解決
1.搞清楚啥時(shí)緩存穿透:
解決方案1.
緩存空數(shù)據(jù),查詢返回的數(shù)據(jù)為空,仍然把這個(gè)空結(jié)果進(jìn)行緩存 優(yōu)點(diǎn)是:簡單。缺點(diǎn)是消耗內(nèi)存,會(huì)出現(xiàn)數(shù)據(jù)不一致問題
為何會(huì)出現(xiàn)數(shù)據(jù)不一致問題
如上圖當(dāng)根據(jù)id=100來查詢,數(shù)據(jù)庫不存在這個(gè)數(shù)據(jù),然后按照方案一的解決 緩存一個(gè)空值,如果后續(xù),這個(gè)id=100 的位置上有了數(shù)據(jù),就會(huì)導(dǎo)致如果還根據(jù)id=100 來查詢,查詢的結(jié)果為空,實(shí)際數(shù)據(jù)庫有數(shù)據(jù),這就造成數(shù)據(jù)不一致的問題。
解決方案2.
優(yōu)點(diǎn):內(nèi)存占用較少,沒有多余的key 缺點(diǎn);實(shí)現(xiàn)較復(fù)雜,存在誤判
緩存 擊穿問題
1.啥是緩存擊穿:給一個(gè)key 設(shè)置了過期時(shí)間,當(dāng)key過期的時(shí)候 ,恰好對這個(gè)key 有大量的請求發(fā)過來,因?yàn)榇藭r(shí)redis中是沒有數(shù)據(jù)的,這些請求瞬間可能就將數(shù)據(jù)庫壓垮。
解決方案:
1.互斥鎖 2.邏輯過期
這里在使用邏輯過期中當(dāng)線程一 走到第三步 要開啟新的線程來進(jìn)行緩存的重建,此時(shí),線程一并不會(huì)等待線程2 緩存重建完成,鎖釋放了之后才返回?cái)?shù)據(jù),而是直接返回?cái)?shù)據(jù),這個(gè)數(shù)據(jù)為舊數(shù)據(jù),在緩存重建過程中,如果有其他的線程過來查詢,此時(shí)獲取鎖是失敗的,同樣是返回舊數(shù)據(jù)。
緩存雪崩
啥是緩存雪崩:指的是在同一時(shí)間段有大量的緩存key同時(shí)失效,或者redis服務(wù)器宕機(jī),導(dǎo)致大量請求到達(dá)數(shù)據(jù)庫,帶來巨大壓力
解決方案
1.給不同的key過期時(shí)間上加一個(gè)隨機(jī)值 2.因?yàn)閞edis服務(wù)宕機(jī)發(fā)生的:利用redis集群提高服務(wù)的高可用,如哨兵模式 集群模式 3.給緩存業(yè)務(wù)添加降級限流策略 4.給業(yè)務(wù)添加多級緩存
redis作為緩存,mysql的數(shù)據(jù)如何與redis進(jìn)行同步呢,(雙寫一致性)
對于一致性要求高的: 讀操作:緩存命中直接返回,緩存為命中,寫入緩存,設(shè)置超時(shí)時(shí)間 寫操作:延遲雙刪 無論是先刪除緩存還是先修改數(shù)據(jù) 都會(huì)出現(xiàn)問題 先刪除緩存,修改數(shù)據(jù)庫,等一段時(shí)間,再去刪除一次緩存。 兩次刪除的第二次刪除就是為了避免臟數(shù)據(jù)的出現(xiàn) 為何要延時(shí)刪除: 因?yàn)閿?shù)據(jù)庫是主從架構(gòu),要等主數(shù)據(jù)庫將數(shù)據(jù)同步到從數(shù)據(jù)庫之后
使用讀寫鎖來保證數(shù)據(jù)強(qiáng)一致性(性能低)
共享鎖:讀鎖(readlock) 加鎖之后其他線程可以進(jìn)行讀取 排他鎖:獨(dú)占鎖(writerlock) 加鎖之后,阻塞其他線程讀寫操作 一般放入緩存中的數(shù)據(jù)大部分都是讀多寫少 當(dāng)去讀取數(shù)據(jù)的時(shí)候可以添加共享鎖,寫數(shù)據(jù)時(shí)加排他鎖
具體的代碼邏輯
:
redis持久化是如何做的?
RDB AOF
redis的數(shù)據(jù)過期策略
問: 假如redis 的key 過期了 會(huì)立即刪除嗎?
redis數(shù)據(jù)淘汰策略
柚子快報(bào)邀請碼778899分享:Java面試 redis 篇
精彩文章
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。