redis(全稱:remote dictionary server 遠端字典服務)是乙個開源的使用ansi c語言編寫、支援網路、可基於記憶體亦可持久化的日誌型、key-value資料庫,並提供多種語言的api。很多web前端求職時都會被問到redis相關問題,尤其是在brt類名企,接下來的我就給大家分享web前端求職必會的redis常見面試題及答案。
1、redis相比memcached有哪些優勢?
memcached所有的值均是簡單的字串,redis作為其替代者, 支援更為豐富的資料型別;
redis的速度比memcached快很多;
redis可以持久化其資料。
2、redis有哪幾種資料淘汰策略?
noeviction:返回錯誤當記憶體限制達到並且客戶端嘗試執行會讓更多記憶體被使用的命令(大部分的寫入指令,但del和幾個例外)。
allkeys-lru: 嘗試**最少使用的鍵(lru),使得新新增的資料有空間存放。
volatile-lru: 嘗試**最少使用的鍵(lru),但僅限於在過期集合的鍵,使得新新增的資料有空間存放。
allkeys-random: **隨機的鍵使得新新增的資料有空間存放。
volatile-random: **隨機的鍵使得新新增的資料有空間存放,但僅限於在過期集合的鍵。volatile-ttl: **在過期集合的鍵,並且優先**存活時間(ttl)較短的鍵,使得新新增的資料有空間存放。
3、redis是單執行緒還是多執行緒?有何優勢?
redis是單執行緒,但是redis 6發布後,它其實是支援多執行緒的。redis是多執行緒的優勢有兩點:
1)單執行緒redis的效能瓶頸主要在於網路的io消耗,所以我們在優化的方向就是要提高網路io效能。
2)redis 6 引入的多執行緒io特性對效能提公升至少是一倍以上。redis的多執行緒部分只是用來處理網路資料的讀寫和協議解析,執行命令仍然是單執行緒。
4、redis主從複製會出現哪些問題?
1)一旦主節點宕機,從節點晉公升為主節點,同時需要修改應用方的主節點位址,還需要命令所有從節點去複製新的主節點,整個過程需要人工干預。
2)主節點的寫能力受到單機的限制。
3)主節點的儲存能力受到單機的限制。
4)原生複製的弊端在早期的版本中也會比較突出,比如:redis複製中斷後,從節點會發起psync。此時如果同步不成功,則會進行全量同步,主庫執行全量備份的同時,可能會造成毫秒或秒級的卡頓。
5、為什麼redis需要把所有資料放到記憶體中?
redis為了達到最快的讀寫速度將資料都讀到記憶體中,並通過非同步的方式將資料寫入磁碟。所以redis具有快速和資料持久化的特徵。如果不將資料放在記憶體中,磁碟i/o速度為嚴重影響redis的效能。在記憶體越來越便宜的今天,redis將會越來越受歡迎。
如果設定了最大使用的記憶體,則資料已有記錄數達到記憶體限值後不能繼續插入新值。
6、有哪些redis分割槽實現方案?
客戶端分割槽就是在客戶端就已經決定資料會被儲存到哪個redis節點或者從哪個redis節點讀取。大多數客戶端已經實現了客戶端分割槽。**分割槽 意味著客戶端將請求傳送給**,然後**決定去哪個節點寫資料或者讀資料。
**根據分割槽規則決定請求哪些redis例項,然後根據redis的響應結果返回給客戶端。redis和memcached的一種**實現就是twemproxy查詢路由(query routing) 的意思是客戶端隨機地請求任意乙個redis例項,然後由redis將請求**給正確的redis節點。
redis cluster實現了一種混合形式的查詢路由,但並不是直接將請求從乙個redis節點**到另乙個redis節點,而是在客戶端的幫助下直接redirected到正確的redis節點。
7、redis持久化資料和快取怎麼做擴容?
如果redis被當做快取使用,使用一致性雜湊實現動態擴容縮容。如果redis被當做乙個持久化儲存使用,必須使用固定的keys-to-nodes對映關係,節點的數量一旦確定不能變化。否則的話(即redis節點需要動態變化的情況),必須使用可以在執行時進行資料再平衡的一套系統,而當前只有redis集群可以做到這樣。
8、redis與其他key-value儲存有什麼不同?
redis有著更為複雜的資料結構並且提供對他們的原子性操作,這是乙個不同於其他資料庫的進化路徑。redis的資料型別都是基於基本資料結構的同時對程式設計師透明,無需進行額外的抽象。redis執行在記憶體中但是可以持久化到磁碟,所以在對不同資料集進行高速讀寫時需要權衡記憶體,應為資料量不能大於硬體記憶體。在記憶體資料庫方面的另乙個優點是, 相比在磁碟上相同的複雜的資料結構,在記憶體中操作起來非常簡單,這樣redis可以做很多內部複雜性很強的事情。 同時,在磁碟格式方面他們是緊湊的以追加的方式產生的,因為他們並不需要進行隨機訪問。
redis常見面試題
為什麼redis單執行緒還是這麼快?1.絕大部分的請求是純粹的記憶體操作 非常快速 2.採用單執行緒,避免了不必要的額競爭條件和上下文切換,單執行緒指的是網路請求模組使用的是乙個執行緒,即乙個執行緒處理了所有網路請求。3.非阻塞i o i o多路復用,這樣提高了redis的吞吐量,多路 指的是多個網...
Redis常見面試題
5.2.1 redis 是什麼?常 的應用場景?redis是乙個快取資料庫,是乙個非關係型資料庫的鍵值儲存資料庫 應用場景 內容快取,主要用於處理大量資料的高訪問負載 日誌系統5.2.2 redis 常 資料型別有哪些?各自有什麼應用場景?string 儲存的資料是普通的鍵值對可用string來進行...
常見面試題(Redis)
redis redis支援的資料型別?string字串 hash 雜湊 list 列表 set 集合 zset sorted set 有序集合 如何解決快取雪崩 我們先說一下什麼是快取雪崩吧 簡單來說就是redis掛掉了,請求全部走資料庫。還有就是 如果快取資料設定的過期時間是相同的,並且redis...