卷起來(lái)扶供,2022金三銀四大廠高頻面試題【持續(xù)更新】

前言

又到一年金三銀四跳槽季,很多程序員都開(kāi)始了瘋狂刷題之旅捏顺,但是這樣刷題的效率極其低下六孵,所以我特意整理了大廠中最常見(jiàn)的50道大廠Redis面試題,幫助大家在最短的時(shí)間內(nèi)復(fù)習(xí)更多的知識(shí)幅骄。廢話不多說(shuō)劫窒,正文走起。

1昌执、什么是 Redis烛亦?簡(jiǎn)述它的優(yōu)缺點(diǎn)?

Redis 本質(zhì)上是一個(gè) Key-Value 類型的內(nèi)存數(shù)據(jù)庫(kù)懂拾,很像 memcached煤禽,整個(gè)數(shù)據(jù)庫(kù)統(tǒng)統(tǒng)加載在內(nèi)存當(dāng)中進(jìn)行操作,定期通過(guò)異步操作把數(shù)據(jù)庫(kù)數(shù)據(jù) flush 到硬盤上進(jìn)行保存岖赋。

因?yàn)槭羌儍?nèi)存操作檬果,Redis 的性能非常出色,每秒可以處理超過(guò) 10 萬(wàn)次讀寫操作唐断,是已知性能最快的 Key-Value DB选脊。

Redis 的出色之處不僅僅是性能,Redis 最大的魅力是支持保存多種數(shù)據(jù)結(jié)構(gòu)脸甘,此外單個(gè) value 的最大限制是 1GB恳啥,不像 memcached 只能保存 1MB 的數(shù)據(jù),因此 Redis 可以用來(lái)實(shí)現(xiàn)很多有用的功能丹诀。

比方說(shuō)用他的 List 來(lái)做 FIFO 雙向鏈表钝的,實(shí)現(xiàn)一個(gè)輕量級(jí)的高性 能消息隊(duì)列服務(wù),用他的 Set 可以做高性能的 tag 系統(tǒng)等等铆遭。

另外 Redis 也可以對(duì)存入的 Key-Value 設(shè)置 expire 時(shí)間硝桩,因此也可以被當(dāng)作一 個(gè)功能加強(qiáng)版的 memcached 來(lái)用。 Redis 的主要缺點(diǎn)是數(shù)據(jù)庫(kù)容量受到物理內(nèi)存的限制枚荣,不能用作海量數(shù)據(jù)的高性能讀寫碗脊,因此 Redis 適合的場(chǎng)景主要局限在較小數(shù)據(jù)量的高性能操作和運(yùn)算上。

2橄妆、Redis 相比 memcached 有哪些優(yōu)勢(shì)衙伶?

(1) memcached 所有的值均是簡(jiǎn)單的字符串,redis 作為其替代者呼畸,支持更為豐富的數(shù)據(jù)類型

(2) redis 的速度比 memcached 快很多

(3) redis 可以持久化其數(shù)據(jù)

3痕支、Redis 支持哪幾種數(shù)據(jù)類型?

String蛮原、List卧须、Set、Sorted Set儒陨、hashes

4花嘶、Redis 有哪幾種數(shù)據(jù)淘汰策略?

noeviction:返回錯(cuò)誤當(dāng)內(nèi)存限制達(dá)到并且客戶端嘗試執(zhí)行會(huì)讓更多內(nèi)存被使用的命令(大部分的寫入指

令蹦漠,但 DEL 和幾個(gè)例外)

allkeys-lru: 嘗試回收最少使用的鍵(LRU)椭员,使得新添加的數(shù)據(jù)有空間存放。

volatile-lru: 嘗試回收最少使用的鍵(LRU)笛园,但僅限于在過(guò)期集合的鍵,使得新添加的數(shù)據(jù)有空間存放隘击。

allkeys-random: 回收隨機(jī)的鍵使得新添加的數(shù)據(jù)有空間存放侍芝。

volatile-random: 回收隨機(jī)的鍵使得新添加的數(shù)據(jù)有空間存放,但僅限于在過(guò)期集合的鍵埋同。

volatile-ttl: 回收在過(guò)期集合的鍵州叠,并且優(yōu)先回收存活時(shí)間(TTL)較短的鍵,使得新添加的數(shù)據(jù)有空間存放。

5凶赁、為什么 Redis 需要把所有數(shù)據(jù)放到內(nèi)存中咧栗?

Redis 為了達(dá)到最快的讀寫速度將數(shù)據(jù)都讀到內(nèi)存中,并通過(guò)異步的方式將數(shù)據(jù)寫入磁盤虱肄。

所以 redis 具有快速和數(shù)據(jù)持久化的特征致板。如果不將數(shù)據(jù)放在內(nèi)存中,磁盤 I/O 速度為嚴(yán)重影響 redis 的性能咏窿。

在內(nèi)存越來(lái)越便宜的今天斟或,redis 將會(huì)越來(lái)越受歡迎。 如果設(shè)置了最大使用的內(nèi)存翰灾,則數(shù)據(jù)已有記錄數(shù)達(dá)到內(nèi)存限值后不能繼續(xù)插入新值缕粹。

6、Redis 集群方案應(yīng)該怎么做纸淮?都有哪些方案平斩?

1.codis。

目前用的最多的集群方案咽块,基本和 twemproxy 一致的效果绘面,但它支持在 節(jié)點(diǎn)數(shù)量改變情況下,舊節(jié)點(diǎn)數(shù)據(jù)可恢復(fù)到新 hash 節(jié)點(diǎn)侈沪。

2.redis cluster3.0 自帶的集群揭璃,特點(diǎn)在于他的分布式算法不是一致性 hash,而是 hash 槽的概念亭罪,以及自身支持節(jié)點(diǎn)設(shè)置從節(jié)點(diǎn)瘦馍。具體看官方文檔介紹。

3.在業(yè)務(wù)代碼層實(shí)現(xiàn)应役,起幾個(gè)毫無(wú)關(guān)聯(lián)的 redis 實(shí)例情组,在代碼層,對(duì) key 進(jìn)行 hash 計(jì)算箩祥,然后去對(duì)應(yīng)的 redis 實(shí)例操作數(shù)據(jù)院崇。 這種方式對(duì) hash 層代碼要求比較高,考慮部分包括袍祖,節(jié)點(diǎn)失效后的替代算法方案底瓣,數(shù)據(jù)震蕩后的自動(dòng)腳本恢復(fù),實(shí)例的監(jiān)控蕉陋,等等捐凭。

7拨扶、Redis 集群方案什么情況下會(huì)導(dǎo)致整個(gè)集群不可用?

有 A茁肠,B屈雄,C 三個(gè)節(jié)點(diǎn)的集群,在沒(méi)有復(fù)制模型的情況下,如果節(jié)點(diǎn) B 失敗了,那么整個(gè)集群就會(huì)以為缺少 5501-11000 這個(gè)范圍的槽而不可用官套。

8、MySQL 里有 2000w 數(shù)據(jù)蚁孔,redis 中只存 20w 的數(shù)據(jù)奶赔,如何保證 redis 中的數(shù)據(jù)都是熱點(diǎn)數(shù)據(jù)?

redis 內(nèi)存數(shù)據(jù)集大小上升到一定大小的時(shí)候杠氢,就會(huì)施行數(shù)據(jù)淘汰策略站刑。

9、Redis 有哪些適合的場(chǎng)景鼻百?

(1)會(huì)話緩存(Session Cache)

最常用的一種使用 Redis 的情景是會(huì)話緩存(session cache)绞旅。用 Redis 緩存會(huì)話比其他存儲(chǔ)(如 Memcached)的優(yōu)勢(shì)在于:Redis 提供持久化。當(dāng)維護(hù)一個(gè)不是嚴(yán)格要求一致性的緩存時(shí)温艇,如果用戶的購(gòu)物車信息全部丟失因悲,大部分人都會(huì)不高興的,現(xiàn)在勺爱,他們還會(huì)這樣嗎晃琳?

幸運(yùn)的是,隨著 Redis 這些年的改進(jìn)琐鲁,很容易找到怎么恰當(dāng)?shù)氖褂?Redis 來(lái)緩存會(huì)話的文檔卫旱。甚至廣為人知的商業(yè)平臺(tái) Magento 也提供 Redis 的插件。

(2)全頁(yè)緩存(FPC)

除基本的會(huì)話 token 之外围段,Redis 還提供很簡(jiǎn)便的 FPC 平臺(tái)顾翼。回到一致性問(wèn)題奈泪,即使重啟了 Redis 實(shí)例适贸,因?yàn)橛写疟P的持久化,用戶也不會(huì)看到頁(yè)面加載速度的下降段磨,這是一個(gè)極大改進(jìn)取逾,類似 PHP 本地 FPC。再次以 Magento 為例苹支,Magento 提供一個(gè)插件來(lái)使用 Redis 作為全頁(yè)緩存后端砾隅。

此外,對(duì) WordPress 的用戶來(lái)說(shuō)债蜜,Pantheon 有一個(gè)非常好的插件 wp-redis晴埂,這個(gè)插件能幫助你以最快速度加載你曾瀏覽過(guò)的頁(yè)面究反。

(3)隊(duì)列

Reids 在內(nèi)存存儲(chǔ)引擎領(lǐng)域的一大優(yōu)點(diǎn)是提供 list 和 set 操作,這使得 Redis 能作為一個(gè)很好的消息隊(duì)列平臺(tái)來(lái)使用儒洛。Redis 作為隊(duì)列使用的操作精耐,就類似于本地程序語(yǔ)言(如 Python)對(duì) list 的 push/pop操作。

如果你快速的在 Google 中搜索“Redis queues”琅锻,你馬上就能找到大量的開(kāi)源項(xiàng)目卦停,這些項(xiàng)目的目的就是利用 Redis 創(chuàng)建非常好的后端工具,以滿足各種隊(duì)列需求恼蓬。例如惊完,Celery 有一個(gè)后臺(tái)就是使用 Redis 作 為 broker,你可以從這里去查看处硬。

(4)排行榜/計(jì)數(shù)器

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

所以凿跳,我們要從排序集合中獲取到排名最靠前的 10 個(gè)用戶–我們稱之為“user_scores”,我們只需要像下面一樣執(zhí)行即可:

當(dāng)然疮方,這是假定你是根據(jù)你用戶的分?jǐn)?shù)做遞增的排序控嗜。如果你想返回用戶及用戶的分?jǐn)?shù),你需要這樣執(zhí)

行:ZRANGE user_scores 0 10 WITHSCORESAgora Games 就是一個(gè)很好的例子骡显,用 Ruby 實(shí)現(xiàn)的躬审,它的排行榜就是使用 Redis 來(lái)存儲(chǔ)數(shù)據(jù)的,你可以在這里看到蟆盐。

(5)發(fā)布/訂閱

最后(但肯定不是最不重要的)是 Redis 的發(fā)布/訂閱功能承边。發(fā)布/訂閱的使用場(chǎng)景確實(shí)非常多。我已看見(jiàn)人們?cè)谏缃痪W(wǎng)絡(luò)連接中使用石挂,還可作為基于發(fā)布/訂閱的腳本觸發(fā)器博助,甚至用 Redis 的發(fā)布/訂閱功能來(lái)建立聊天系統(tǒng)!

10痹愚、Redis 和 Redisson 有什么關(guān)系富岳?

Redisson 是一個(gè)高級(jí)的分布式協(xié)調(diào) Redis 客服端,能幫助用戶在分布式環(huán)境中輕松實(shí)現(xiàn)一些 Java 的對(duì)象(Bloom filter, BitSet, Set, SetMultimap, ScoredSortedSet, SortedSet, Map, ConcurrentMap, List, ListMultimap, Queue, BlockingQueue, Deque, BlockingDeque, Semaphore, Lock, ReadWriteLock, AtomicLong, CountDownLatch, Publish / Subscribe, HyperLogLog)拯腮。

11窖式、Jedis 與 Redisson 對(duì)比有什么優(yōu)缺點(diǎn)?

Jedis 是 Redis 的 Java 實(shí)現(xiàn)的客戶端动壤,其 API 提供了比較全面的 Redis 命令的支持萝喘;

Redisson 實(shí)現(xiàn)了分布式和可擴(kuò)展的 Java 數(shù)據(jù)結(jié)構(gòu),和 Jedis 相比,功能較為簡(jiǎn)單阁簸,不支持字符串操作爬早,不支持排序、事務(wù)启妹、管道筛严、分區(qū)等 Redis 特性。Redisson 的宗旨是促進(jìn)使用者對(duì) Redis 的關(guān)注分離饶米,從而讓使用者能夠?qū)⒕Ω械胤旁谔幚順I(yè)務(wù)邏輯上桨啃。

12、Redis 如何設(shè)置密碼及驗(yàn)證密碼檬输?

設(shè)置密碼:config set requirepass 123456

授權(quán)密碼:auth 123456

13优幸、說(shuō)說(shuō) Redis 哈希槽的概念?

Redis 集群沒(méi)有使用一致性 hash,而是引入了哈希槽的概念褪猛,Redis 集群有 16384 個(gè)哈希槽,每個(gè) key 通 過(guò) CRC16 校驗(yàn)后對(duì) 16384 取模來(lái)決定放置哪個(gè)槽羹饰,集群的每個(gè)節(jié)點(diǎn)負(fù)責(zé)一部分 hash 槽伊滋。

14、Redis 集群的主從復(fù)制模型是怎樣的队秩?

為了使在部分節(jié)點(diǎn)失敗或者大部分節(jié)點(diǎn)無(wú)法通信的情況下集群仍然可用笑旺,所以集群使用了主從復(fù)制模型,每個(gè)節(jié)點(diǎn)都會(huì)有 N-1 個(gè)復(fù)制品.

15、Redis 集群最大節(jié)點(diǎn)個(gè)數(shù)是多少馍资?

16384 個(gè)筒主。

16、Redis 中的管道有什么用鸟蟹?

一次請(qǐng)求/響應(yīng)服務(wù)器能實(shí)現(xiàn)處理新的請(qǐng)求即使舊的請(qǐng)求還未被響應(yīng)乌妙。這樣就可以將多個(gè)命令發(fā)送到服務(wù)器,而不用等待回復(fù)建钥,最后在一個(gè)步驟中讀取該答復(fù)藤韵。

這就是管道(pipelining),是一種幾十年來(lái)廣泛使用的技術(shù)熊经。例如許多 POP3 協(xié)議已經(jīng)實(shí)現(xiàn)支持這個(gè)功能泽艘,大大加快了從服務(wù)器下載新郵件的過(guò)程。

17镐依、怎么理解 Redis 事務(wù)匹涮?

事務(wù)是一個(gè)單獨(dú)的隔離操作:事務(wù)中的所有命令都會(huì)序列化、按順序地執(zhí)行槐壳。事務(wù)在執(zhí)行的過(guò)程中然低,不會(huì)被其他客戶端發(fā)送來(lái)的命令請(qǐng)求所打斷。

事務(wù)是一個(gè)原子操作:事務(wù)中的命令要么全部被執(zhí)行,要么全部都不執(zhí)行脚翘。

18灼卢、Redis 事務(wù)相關(guān)的命令有哪幾個(gè)?

MULTI来农、EXEC鞋真、DISCARD、WATCH

19沃于、Redis 如何做內(nèi)存優(yōu)化涩咖?

盡可能使用散列表(hashes),散列表(是說(shuō)散列表里面存儲(chǔ)的數(shù)少)使用的內(nèi)存非常小繁莹,所以你應(yīng)該盡可能的將你的數(shù)據(jù)模型抽象到一個(gè)散列表里面檩互。

比如你的 web 系統(tǒng)中有一個(gè)用戶對(duì)象,不要為這個(gè)用戶的名稱咨演,姓氏闸昨,郵箱,密碼設(shè)置單獨(dú)的 key,而是應(yīng)該把這個(gè)用戶的所有信息存儲(chǔ)到一張散列表里面薄风。

20饵较、Redis 回收進(jìn)程如何工作的?

一個(gè)客戶端運(yùn)行了新的命令遭赂,添加了新的數(shù)據(jù)循诉。

Redi 檢查內(nèi)存使用情況,如果大于 maxmemory 的限制, 則根據(jù)設(shè)定好的策略進(jìn)行回收撇他。

一個(gè)新的命令被執(zhí)行茄猫,等等。

所以我們不斷地穿越內(nèi)存限制的邊界困肩,通過(guò)不斷達(dá)到邊界然后不斷地回收回到邊界以下划纽。

如果一個(gè)命令的結(jié)果導(dǎo)致大量?jī)?nèi)存被使用(例如很大的集合的交集保存到一個(gè)新的鍵),不用多久內(nèi)存限制就會(huì)被這個(gè)內(nèi)存使用量超越锌畸。

總結(jié)

由于篇幅內(nèi)容有限阿浓,本次分享就到這里了!如果文章對(duì)你有幫助蹋绽,不要忘記點(diǎn)贊收藏關(guān)注哦芭毙!

下期將為大家更新 :金三銀四互聯(lián)網(wǎng)大廠面試題《基礎(chǔ)篇》

祝大家都能早日升職加薪!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末卸耘,一起剝皮案震驚了整個(gè)濱河市退敦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蚣抗,老刑警劉巖侈百,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瓮下,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡钝域,警方通過(guò)查閱死者的電腦和手機(jī)讽坏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)例证,“玉大人路呜,你說(shuō)我怎么就攤上這事≈郑” “怎么了胀葱?”我有些...
    開(kāi)封第一講書人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)笙蒙。 經(jīng)常有香客問(wèn)我抵屿,道長(zhǎng),這世上最難降的妖魔是什么捅位? 我笑而不...
    開(kāi)封第一講書人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任轧葛,我火速辦了婚禮,結(jié)果婚禮上艇搀,老公的妹妹穿的比我還像新娘尿扯。我一直安慰自己,他們只是感情好中符,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著誉帅,像睡著了一般淀散。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蚜锨,一...
    開(kāi)封第一講書人閱讀 50,084評(píng)論 1 291
  • 那天档插,我揣著相機(jī)與錄音,去河邊找鬼亚再。 笑死郭膛,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的氛悬。 我是一名探鬼主播则剃,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼如捅!你這毒婦竟也來(lái)了棍现?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤镜遣,失蹤者是張志新(化名)和其女友劉穎己肮,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡谎僻,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年娄柳,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片艘绍。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡赤拒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鞍盗,到底是詐尸還是另有隱情需了,我是刑警寧澤,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布般甲,位于F島的核電站肋乍,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏敷存。R本人自食惡果不足惜墓造,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望锚烦。 院中可真熱鬧觅闽,春花似錦、人聲如沸涮俄。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)彻亲。三九已至孕锄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間苞尝,已是汗流浹背畸肆。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留宙址,地道東北人轴脐。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像抡砂,于是被迫代替她去往敵國(guó)和親大咱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351

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