2022年Redis最新面試題第1篇 - Redis基礎(chǔ)知識

大家好伤锚,我是漫步coding, 最近在整理2022年Redis最新面試題, 大家也可以通過我下面的博客地址在線閱讀, 今天講講第1篇 - Redis基礎(chǔ)知識绰筛。本文首發(fā)于公眾號: 漫步coding

2022年Redis最新面試題目錄

Redis基礎(chǔ)知識

Redis數(shù)據(jù)結(jié)構(gòu)

Redis事務(wù)

Redis數(shù)據(jù)持久化

Redis集群

Redis淘汰策略

Redis分布式鎖

Redis緩存問題

運維和部署

Redis基礎(chǔ)知識

什么是 Redis, 有哪些優(yōu)缺點?

Redis 最適合的場景, 可以簡單的說說嗎?

Redis 相比 Memcached 有哪些優(yōu)勢饶辙?

一個字符串類型的值能存儲最大容量是多少嗽桩?

Redis 讀寫分離

什么是 Redis, 有哪些優(yōu)缺點?

出現(xiàn)概率: ★★★★

Redis是一個非關(guān)系性數(shù)據(jù)庫, 開源的睹限、使用C語言編寫晚伙、支持網(wǎng)絡(luò)颖低、可基于內(nèi)存亦可持久化的日志型怨规、key-value(鍵值對)數(shù)據(jù)庫陌宿,是目前分布式架構(gòu)中不可或缺的一環(huán)。

Redis服務(wù)器程序是單進程模型波丰,也就是在一臺服務(wù)器上可以同時啟動多個Redis進程壳坪,而Redis的實際處理速度則完全依靠于主進程的的執(zhí)行效率。若在服務(wù)器上只運行一個Redis進程掰烟,當多個客戶端同時訪問時爽蝴,服務(wù)器的處理能力會有一定程度的下降沐批,若在同一臺服務(wù)器上開啟多個Redis進程,Redis在提高并發(fā)處理能力的同時會給服務(wù)器的CPU造成很大壓力蝎亚。也就是說九孩,在實際生產(chǎn)環(huán)境中,需要根據(jù)實際的需求來決定開啟多少個Redis進程发框。若對高并發(fā)要求更高一些躺彬,可能會考慮在同一臺服務(wù)器上開啟多個進程。若CPU資源比較緊張梅惯,采用單進程即可宪拥。

Redis優(yōu)點:

1)、性能極高, 讀寫性能優(yōu)異个唧,從內(nèi)存當中進行IO讀寫速度快江解。

2)、支持數(shù)據(jù)的持久化(支持AOF和RDB兩種持久化方式)徙歼,對數(shù)據(jù)的更新采用Copy-on-write技術(shù)(寫拷貝)犁河,可以異步的保存在磁盤上

由于Redis的數(shù)據(jù)都存放在內(nèi)存中,如果沒有配置持久化魄梯,redis重啟后數(shù)據(jù)就全丟失了桨螺,于是需要開啟redis的持久化功能,將數(shù)據(jù)保存到磁 盤上酿秸,當redis重啟后灭翔,可以從磁盤中恢復(fù)數(shù)據(jù)。

redis提供兩種方式進行持久化辣苏,一種是RDB持久化:指在指定的時間間隔內(nèi)將內(nèi)存中的數(shù)據(jù)集快照寫入磁盤肝箱,實際操作過程是fork一個子進程,先將數(shù)據(jù)集寫入臨時文件稀蟋,寫入成功后煌张,再替換之前的文件,用二進制壓縮存儲退客。

還有一種是AOF持久化:以日志的形式記錄服務(wù)器所處理的每一個寫骏融、刪除操作,查詢操作不會記錄萌狂,以文本的方式記錄档玻,可以打開文件看到詳細的操作記錄。

3)茫藏、支持主從復(fù)制误趴,主機會自動將數(shù)據(jù)同步到從機,可以進行讀寫分離务傲。

4)凉当、數(shù)據(jù)結(jié)構(gòu)豐富:除了支持string類型的value外還支持string碧囊、hash、set纤怒、sortedset糯而、list等數(shù)據(jù)結(jié)構(gòu)。

5)泊窘、原子性:多個操作通過MULTI和EXEC指令支持事務(wù)

Redis缺點:

1)熄驼、主從同步,如果主機宕機烘豹,宕機前有一部分數(shù)據(jù)沒有同步到從機瓜贾,會導(dǎo)致數(shù)據(jù)不一致。

2)携悯、主從同步祭芦,數(shù)據(jù)同步會有延遲。

3)憔鬼、讀寫分離龟劲,主機寫的負載量太大,也會導(dǎo)致主機的宕機

4)轴或、數(shù)據(jù)庫容量受到物理內(nèi)存的限制昌跌,不能用作海量數(shù)據(jù)的高性能讀寫

Redis 最適合的場景, 可以簡單的說說嗎?

出現(xiàn)概率: ★★★★

1、會話緩存(Session Cache)最常用的一種使用Redis的情景是會話緩存(session cache), Redis緩存會話比其他存儲(如Memcached)的優(yōu)勢在于:Redis提供持久化照雁。

2蚕愤、排行榜/計數(shù)器

Redis在內(nèi)存中對數(shù)字進行遞增或遞減的操作實現(xiàn)的非常好。集合(Set)和有序集合(Sorted Set)也使得我們在執(zhí)行這些操作的時候變的非常簡單饺蚊,Redis只是正好提供了這兩種數(shù)據(jù)結(jié)構(gòu)萍诱。

3、發(fā)布/訂閱

Redis的發(fā)布/訂閱功能污呼。發(fā)布/訂閱的使用場景確實非常多裕坊。我已看見人們在社交網(wǎng)絡(luò)連接中使用,還可作為基于發(fā)布/訂閱的腳本觸發(fā)器曙求,甚至用Redis的發(fā)布/訂閱功能來建立聊天系統(tǒng)碍庵!

4映企、緩存熱數(shù)據(jù)

可以緩存一些高頻讀, 低頻寫的內(nèi)容悟狱, 比如app首頁一些設(shè)置等。

5堰氓、利用BitMap統(tǒng)計用戶簽到挤渐、統(tǒng)計活躍用戶、用戶在線狀態(tài)等

Redis從2.2.0版本開始新增了setbit,getbit,bitcount等幾個bitmap相關(guān)命令双絮。雖然是新命令浴麻,但是并沒有新增新的數(shù)據(jù)類型得问,因為setbit等命令只不過是在set上的擴展。

可以利用BitMap統(tǒng)計用戶簽到软免、統(tǒng)計活躍用戶宫纬、用戶在線狀態(tài)


6、限速膏萧,接口訪問頻率限制:比如發(fā)送短信驗證碼的接口漓骚,通常為了防止別人惡意頻刷,會限制用戶每分鐘獲取驗證碼的頻率榛泛,例如一分鐘不能超過 5 次蝌蹂。

假設(shè)用于數(shù)據(jù)量上億的場景下,例如幾億用戶系統(tǒng)的簽到曹锨,去重登錄次數(shù)統(tǒng)計孤个,某用戶是否在線狀態(tài)等等。騰訊10億用戶沛简,要幾個毫秒內(nèi)查詢到某個用戶是否在線齐鲤,能怎么做?

千萬別說給每個用戶建立一個key椒楣,然后挨個記(你可以算一下需要的內(nèi)存會很恐怖佳遂,而且這種類似的需求很多。這里要用到位操作——使用setbit撒顿、getbit丑罪、bitcount命令。原理是:

redis內(nèi)構(gòu)建一個足夠長的數(shù)組凤壁,每個數(shù)組元素只能是0和1兩個值吩屹,然后這個數(shù)組的下標index用來表示用戶id(必須是數(shù)字哈),那么很顯然拧抖,這個幾億長的大數(shù)組就能通過下標和元素值(0和1)來構(gòu)建一個記憶系統(tǒng)煤搜。

Redis key name 約定

$dayKey?='login:'.\date('Ymd',\time());

Redis 數(shù)據(jù)結(jié)構(gòu)

這里需要注意的是Redis中字符串限制最大為512MB,所以位圖中最大可以設(shè)置2^32個不同的位(42.9億個)唧席。圖位的最小單位是比特(bit)擦盾,每個bit的值只能是0或1。同時注意setbit時的偏移量淌哟,當偏移量很大時迹卢,可能會有較大耗時。位圖不是絕對的好徒仓,有時可能更浪費空間腐碱。

127.0.0.1:6379>setbit'login-20220405'21

127.0.0.1:6379>setbit'login-20220405'1001

(integer)1

127.0.0.1:6379>setbit'login-20220405'2000000001

(integer)1

127.0.0.1:6379>setbit'login-20220405'42900000001

(integer)1

127.0.0.1:6379>setbit'login-20220405'43000000001

(error)?ERR?bit?offset?isnotan?integerorout?of?range

127.0.0.1:6379>getbit'login-20220405'100

(integer)1

127.0.0.1:6379>getbit'login-20220405'101

(integer)0

127.0.0.1:6379>

Redis 相比 Memcached 有哪些優(yōu)勢?

出現(xiàn)概率: ★★★

如果簡單地比較Redis與Memcached的區(qū)別掉弛,大多數(shù)都會得到以下觀點:

1 症见、數(shù)據(jù)支持類型 Memcache 對數(shù)據(jù)類型支持相對簡單喂走。Redis 有復(fù)雜的數(shù)據(jù)類型。Redis不僅僅支持簡單的k/v類型的數(shù)據(jù)谋作,同時還提供list芋肠,set,zset遵蚜,hash等數(shù)據(jù)結(jié)構(gòu)的存儲业栅。

2 、Redis支持數(shù)據(jù)的備份谬晕,即master-slave模式的數(shù)據(jù)備份碘裕。

3 、存儲方式 Memecache 把數(shù)據(jù)全部存在內(nèi)存之中攒钳, 斷電后會掛掉帮孔, 數(shù)據(jù)不能超過內(nèi)存大小。Redis支持數(shù)據(jù)的持久化不撑,可以將內(nèi)存中的數(shù)據(jù)保持在磁盤中文兢,重啟的時候可以再次加載進行使用。

一個字符串類型的值能存儲最大容量是多少焕檬?

Redis中字符串限制最大為512MB

Redis 讀寫分離

出現(xiàn)概率: ★★★

讀取請求QPS(Queries Per Second)壓力較大的服務(wù), 可以采用Redis讀寫分離姆坚,可以提供高可用、高性能实愚、靈活的讀寫分離服務(wù)兼呵,滿足熱點數(shù)據(jù)集中及高并發(fā)讀取的業(yè)務(wù)需求,最大化地節(jié)約運維成本腊敲。

讀寫分離版采取鏈式復(fù)制架構(gòu)击喂,可以通過擴展只讀實例個數(shù)使整體實例性能呈線性增長,同時基于源碼層面對Redis復(fù)制流程的定制優(yōu)化碰辅,可以最大程度地提升線性復(fù)制的系統(tǒng)穩(wěn)定性懂昂,充分利用每一個只讀節(jié)點的物理資源。


由于數(shù)據(jù)同步至只讀節(jié)點存在一定延遲没宾,且采用鏈式復(fù)制凌彬,只讀節(jié)點數(shù)越多,靠近鏈路末端的只讀節(jié)點數(shù)據(jù)延遲越大循衰,因此選用此架構(gòu)時铲敛,業(yè)務(wù)需要能接受一定程度的臟數(shù)據(jù)。如果對數(shù)據(jù)一致性要求較高羹蚣,推薦選用集群架構(gòu)原探。

你知道怎么用Redis實現(xiàn)實現(xiàn)分布式鎖?

出現(xiàn)概率: ★★★★

Redis 官方站提出了一種權(quán)威的基于 Redis 實現(xiàn)分布式鎖的方式名叫Redlock乱凿,此種方式比原先的單節(jié)點的方法更安全顽素。它可以保證以下特性:

安全特性:互斥訪問咽弦,即永遠只有一個client能拿到鎖

避免死鎖:最終 client 都可能拿到鎖,不會出現(xiàn)死鎖的情況胁出,即使原本鎖住某資源的 client crash 了或者出現(xiàn)了網(wǎng)絡(luò)分區(qū)

容錯性:只要大部分 Redis 節(jié)點存活就可以正常提供服務(wù)型型。


也歡迎關(guān)注我的公眾號:?漫步coding。一起交流, 在coding的世界里漫步, 回復(fù):?redis, 免費獲取最新Redis面試題(含答案)全蝶。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末闹蒜,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子抑淫,更是在濱河造成了極大的恐慌绷落,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件始苇,死亡現(xiàn)場離奇詭異砌烁,居然都是意外死亡,警方通過查閱死者的電腦和手機催式,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進店門函喉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人荣月,你說我怎么就攤上這事管呵。” “怎么了哺窄?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵捐下,是天一觀的道長。 經(jīng)常有香客問我萌业,道長蔑担,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任咽白,我火速辦了婚禮啤握,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘晶框。我一直安慰自己排抬,他們只是感情好,可當我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布授段。 她就那樣靜靜地躺著蹲蒲,像睡著了一般。 火紅的嫁衣襯著肌膚如雪侵贵。 梳的紋絲不亂的頭發(fā)上届搁,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天,我揣著相機與錄音,去河邊找鬼卡睦。 笑死宴胧,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的表锻。 我是一名探鬼主播恕齐,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼瞬逊!你這毒婦竟也來了显歧?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤确镊,失蹤者是張志新(化名)和其女友劉穎士骤,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蕾域,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡敦间,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了束铭。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片廓块。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖契沫,靈堂內(nèi)的尸體忽然破棺而出带猴,到底是詐尸還是另有隱情,我是刑警寧澤懈万,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布拴清,位于F島的核電站,受9級特大地震影響会通,放射性物質(zhì)發(fā)生泄漏口予。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一涕侈、第九天 我趴在偏房一處隱蔽的房頂上張望沪停。 院中可真熱鬧,春花似錦裳涛、人聲如沸木张。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽舷礼。三九已至,卻和暖如春郊闯,著一層夾襖步出監(jiān)牢的瞬間妻献,已是汗流浹背蛛株。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留育拨,地道東北人谨履。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像至朗,于是被迫代替她去往敵國和親屉符。 傳聞我的和親對象是個殘疾皇子剧浸,可洞房花燭夜當晚...
    茶點故事閱讀 45,675評論 2 359

推薦閱讀更多精彩內(nèi)容