1. 程式人生 > >Redis常見的面試題?

Redis常見的面試題?

一、使用Redis有哪些好處?

1、速度快,因為資料存在記憶體中,類似於HashMap,HashMap的優勢就是查詢和操作的時間複雜度都是O(1);

2、支援豐富資料型別,支援string,list,set,sorted set,hash;

3、支援事務,操作都是原子性,所謂的原子性就是對資料的更改要麼全部執行,要麼全部不執行;

4、豐富的特性:可用於快取,訊息,按key設定過期時間,過期後將會自動刪除。

二、redis相比memcached有哪些優勢?

    1、 memcached所有的值均是簡單的字串,redis作為其替代者,支援更為豐富的資料型別

2、redis的速度比memcached快很多

 3、redis可以持久化其資料

三、redis常見效能問題和解決方案:

    1、 Master最好不要做任何持久化工作,如RDB記憶體快照和AOF日誌檔案

    2、如果資料比較重要,某個Slave開啟AOF備份資料,策略設定為每秒同步一次

    3、 為了主從複製的速度和連線的穩定性,Master和Slave最好在同一個區域網

    4、儘量避免在壓力很大的主庫上增加從庫

    5、主從複製不要用圖狀結構,用單向連結串列結構更為穩定,即:Master <- Slave1 <- Slave2 <- Slave3...

    這樣的結構方便解決單點故障問題,實現Slave對Master的替換。如果Master掛了,可以立刻啟用Slave1做Master,其他不變。

四、MySQL裡有2000w資料,redis中只存20w的資料,如何保證redis中的資料都是熱點資料?

  相關知識:redis 記憶體資料集大小上升到一定大小的時候,就會施行資料淘汰策略。redis 提供 6種資料淘汰策略:

  voltile-lru:從已設定過期時間的資料集(server.db[i].expires)中挑選最近最少使用的資料淘

  volatile-ttl:從已設定過期時間的資料集(server.db[i].expires)中挑選將要過期的資料淘汰

  volatile-random:從已設定過期時間的資料集(server.db[i].expires)中任意選擇資料淘汰

  allkeys-lru:從資料集(server.db[i].dict)中挑選最近最少使用的資料淘汰

  allkeys-random:從資料集(server.db[i].dict)中任意選擇資料淘汰

  no-enviction(驅逐):禁止驅逐資料

五、Memcache與Redis的區別都有哪些?

1、儲存方式

Memecache把資料全部存在記憶體之中,斷電後會掛掉,資料不能超過記憶體大小。

  Redis有部份存在硬碟上,這樣能保證資料的永續性。

2、資料支援型別

Memcache對資料型別支援相對簡單。

  Redis有複雜的資料型別。3、使用底層模型不同

它們之間底層實現方式 以及與客戶端之間通訊的應用協議不一樣。

  Redis直接自己構建了VM 機制 ,因為一般的系統呼叫系統函式的話,會浪費一定的時間去移動和請求。

4、value大小redis最大可以達到1GB,而memcache只有1MB

六、Redis 常見的效能問題都有哪些?如何解決?

        1)Master寫記憶體快照,save命令排程rdbSave函式,會阻塞主執行緒的工作,當快照比較大時對效能影響是非常大的,會間斷性暫停服務,所以Master最好不要寫記憶體快照。

        2)Master AOF持久化,如果不重寫AOF檔案,這個持久化方式對效能的影響是最小的,但是AOF檔案會不斷增大,AOF檔案過大會影響Master重啟的恢復速度。Master最好不要做任何持久化工作,包括記憶體快照和AOF日誌檔案,特別是不要啟用記憶體快照做持久化,如果資料比較關鍵,某個Slave開啟AOF備份資料,策略為每秒同步一次。

        3)Master呼叫BGREWRITEAOF重寫AOF檔案,AOF在重寫的時候會佔大量的CPU和記憶體資源,導致服務load過高,出現短暫服務暫停現象。

        4)Redis主從複製的效能問題,為了主從複製的速度和連線的穩定性,Slave和Master最好在同一個區域網內。