Redis常見面試題

redis都有哪些數據類型

String hash list set sorted set

String是最簡單的類型,就是普通的set和get,做簡單的KV緩存

hash類似map的一種結構,這個一般就是可以將將結構化的數據,比如一個對象給緩存在Redis裏,然後每次讀寫緩存的時候,可以就操作hash裏的某個字段

list有序列表,存儲列表型的數據結構,類似粉絲列表,文章評論列表

set是無序集合,自動去重。直接基於set將系統裏需要去重的數據扔進去就給去重

sorted set 是排序的set 去重但可以排序,寫進去的時候給一個分數自動根據分數排序

緩存雪崩
對於系統A,假設每天高峯期每秒5000個請求,本來緩存在高峯期可以抗住每秒4000個請求,但是緩存機器意外發生了宕機,緩存掛了,請求全部落入數據庫,必然扛不住報警。此時,如果沒采取什麼方案處理故障,數據庫會被新的流量打死。

file

解決方案

Redis高可用 主從+哨兵 本地緩存+限流降級 Redis持久化

緩存穿透

對於系統A假設一秒5000個請求,其中4000個請求是黑客發出的惡意攻擊。
黑客發出的4000個攻擊,緩存中查不到去庫裏查也查不到數據庫id從1開始的,黑客發過來的id是負數,緩存中不會有請求視緩存於無物,查詢數據庫這種惡意攻擊場景的緩存穿透就會直接把數據庫打死的。

解決方案

寫一個空值到緩存裏去,設置過期時間。布隆過濾器

緩存擊穿

某個key非常熱點,訪問非常頻繁處於集中式高併發訪問的情況,當這個key在失效的瞬間大量的請求擊穿了緩存直接請求數據庫,就像是在一道屏障上鑿開了一個洞。

解決方式

可以將熱點數據設置爲永遠不過期;或者基於 redis or zookeeper 實現互斥鎖,等待第一個請求構建完緩存之後,再釋放鎖,進而其它請求才能通過該 key 訪問數據。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章