Web前端求职时都会被问到的Redis面试题分享
Web前端人員怎么求職?Redis面試題有哪些?Redis(全稱:Remote Dictionary Server 遠(yuǎn)程字典服務(wù))是一個(gè)開(kāi)源的使用ANSI C語(yǔ)言編寫、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫(kù),并提供多種語(yǔ)言的API。很多人在Web前端求職時(shí)都會(huì)被問(wèn)到Redis相關(guān)問(wèn)題,尤其是在BRT類名企,接下來(lái)小千就給大家分享一下。
1、Redis相比memcached有哪些優(yōu)勢(shì)?
memcached所有的值均是簡(jiǎn)單的字符串,redis作為其替代者, 支持更為豐富的數(shù)據(jù)類型;
redis的速度比memcached快很多;
redis可以持久化其數(shù)據(jù)。
2、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ù)有空間存放。
3、Redis是單線程還是多線程?有何優(yōu)勢(shì)?
Redis是單線程,但是Redis 6發(fā)布后,它其實(shí)是支持多線程的。Redis是多線程的優(yōu)勢(shì)有兩點(diǎn):
1)單線程Redis的性能瓶頸主要在于網(wǎng)絡(luò)的IO消耗,所以我們?cè)趦?yōu)化的方向就是要提高網(wǎng)絡(luò)IO性能。
2)Redis 6 引入的多線程IO特性對(duì)性能提升至少是一倍以上。Redis的多線程部分只是用來(lái)處理網(wǎng)絡(luò)數(shù)據(jù)的讀寫和協(xié)議解析,執(zhí)行命令仍然是單線程。
4、Redis主從復(fù)制會(huì)出現(xiàn)哪些問(wèn)題?
1)一旦主節(jié)點(diǎn)宕機(jī),從節(jié)點(diǎn)晉升為主節(jié)點(diǎn),同時(shí)需要修改應(yīng)用方的主節(jié)點(diǎn)地址,還需要命令所有從節(jié)點(diǎn)去復(fù)制新的主節(jié)點(diǎn),整個(gè)過(guò)程需要人工干預(yù)。
2)主節(jié)點(diǎn)的寫能力受到單機(jī)的限制。
3)主節(jié)點(diǎn)的存儲(chǔ)能力受到單機(jī)的限制。
4)原生復(fù)制的弊端在早期的版本中也會(huì)比較突出,比如:redis復(fù)制中斷后,從節(jié)點(diǎn)會(huì)發(fā)起psync。此時(shí)如果同步不成功,則會(huì)進(jìn)行全量同步,主庫(kù)執(zhí)行全量備份的同時(shí),可能會(huì)造成毫秒或秒級(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分區(qū)實(shí)現(xiàn)方案?
客戶端分區(qū)就是在客戶端就已經(jīng)決定數(shù)據(jù)會(huì)被存儲(chǔ)到哪個(gè)Redis節(jié)點(diǎn)或者從哪個(gè)Redis節(jié)點(diǎn)讀取。大多數(shù)客戶端已經(jīng)實(shí)現(xiàn)了客戶端分區(qū)。代理分區(qū) 意味著客戶端將請(qǐng)求發(fā)送給代理,然后代理決定去哪個(gè)節(jié)點(diǎn)寫數(shù)據(jù)或者讀數(shù)據(jù)。
代理根據(jù)分區(qū)規(guī)則決定請(qǐng)求哪些Redis實(shí)例,然后根據(jù)Redis的響應(yīng)結(jié)果返回給客戶端。Redis和memcached的一種代理實(shí)現(xiàn)就是Twemproxy查詢路由(Query routing) 的意思是客戶端隨機(jī)地請(qǐng)求任意一個(gè)Redis實(shí)例,然后由Redis將請(qǐng)求轉(zhuǎn)發(fā)給正確的Redis節(jié)點(diǎn)。
Redis Cluster實(shí)現(xiàn)了一種混合形式的查詢路由,但并不是直接將請(qǐng)求從一個(gè)Redis節(jié)點(diǎn)轉(zhuǎn)發(fā)到另一個(gè)Redis節(jié)點(diǎn),而是在客戶端的幫助下直接redirected到正確的Redis節(jié)點(diǎn)。
7、Redis持久化數(shù)據(jù)和緩存怎么做擴(kuò)容?
如果Redis被當(dāng)做緩存使用,使用一致性哈希實(shí)現(xiàn)動(dòng)態(tài)擴(kuò)容縮容。如果Redis被當(dāng)做一個(gè)持久化存儲(chǔ)使用,必須使用固定的keys-to-nodes映射關(guān)系,節(jié)點(diǎn)的數(shù)量一旦確定不能變化。否則的話(即Redis節(jié)點(diǎn)需要?jiǎng)討B(tài)變化的情況),必須使用可以在運(yùn)行時(shí)進(jìn)行數(shù)據(jù)再平衡的一套系統(tǒng),而當(dāng)前只有Redis集群可以做到這樣。
8、Redis與其他key-value存儲(chǔ)有什么不同?
Redis有著更為復(fù)雜的數(shù)據(jù)結(jié)構(gòu)并且提供對(duì)他們的原子性操作,這是一個(gè)不同于其他數(shù)據(jù)庫(kù)的進(jìn)化路徑。Redis的數(shù)據(jù)類型都是基于基本數(shù)據(jù)結(jié)構(gòu)的同時(shí)對(duì)程序員透明,無(wú)需進(jìn)行額外的抽象。Redis運(yùn)行在內(nèi)存中但是可以持久化到磁盤,所以在對(duì)不同數(shù)據(jù)集進(jìn)行高速讀寫時(shí)需要權(quán)衡內(nèi)存,應(yīng)為數(shù)據(jù)量不能大于硬件內(nèi)存。在內(nèi)存數(shù)據(jù)庫(kù)方面的另一個(gè)優(yōu)點(diǎn)是, 相比在磁盤上相同的復(fù)雜的數(shù)據(jù)結(jié)構(gòu),在內(nèi)存中操作起來(lái)非常簡(jiǎn)單,這樣Redis可以做很多內(nèi)部復(fù)雜性很強(qiáng)的事情。 同時(shí),在磁盤格式方面他們是緊湊的以追加的方式產(chǎn)生的,因?yàn)樗麄儾⒉恍枰M(jìn)行隨機(jī)訪問(wèn)。
想了解更多Redis面試題及答案,歡迎關(guān)注小千,后期會(huì)繼續(xù)分享Web前端相關(guān)技術(shù)知識(shí)。
本文來(lái)自??千鋒教育??,轉(zhuǎn)載請(qǐng)注明出處。
總結(jié)
以上是生活随笔為你收集整理的Web前端求职时都会被问到的Redis面试题分享的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 入门Java开发,这三大知识体系你要知道
- 下一篇: 2022年学Web前端怎么样?还有发展前