(面試) redis相關問題

語言: CN / TW / HK

1. redis原理

Redis底層核心原理是基於事件的處理流程。主程序處於一個阻塞狀態的事件循環中等待事件,當有事件發生時,根據事件的屬性分到相應的處理含函數進行處理。事件是以併發的方式發送到服務處理器,服務處理器將事件整合到一個有序隊列中,並分發到具體的請求處理器進行處理。

Redis採用I/O多路複用的方式,封裝了操作系統底層select/epoll等函數,實現對多個套接字 (socket)的監聽,這些套接字就是對應多個不同客户端的連接。最後由對應的處理器將處理的結果返回客户端。  參考https://www.jianshu.com/p/397449cadc9a

2.redis是單線程還是多線程?

Redis 在 4.0 之前明明採用單線程但卻依然快的原因:基於內存操作、量身打造的數據結構、I/O 多路複用和非阻塞 I/O、避免了不必要的線程上下文切換。 Redis4.0 開始支持多線程,主要體現在大數據的異步刪除上面,例如:unlink key、flushdb async、flushall async 等。而 Redis6.0 的多線程則增加了對 I/O 讀寫的併發能力,因為數據在用户態和內核態之間穿梭是需要進行拷貝的,而這一步是阻塞的,所以通過多個線程並行操作從而更好的提升 Redis 的性能。

3.持久化

Redis為持久化提供了兩種方式:

RDB:redis的數據存儲在內從中,不定期的將數據異步同步到磁盤上(半持久化), Redis DataBase 的縮寫。 

AOF:記錄redis的所有寫操作到aof(append only file)文件中(全持久化) ,AOF 是Append only file的縮寫。

redis中默認使用的是RDB實現數據持久化

RDB持久化數據的優缺點:

優勢:

  • 適合大規模數據恢復
  • 對數據完整性和已執行要求不高

劣勢:

  • 在一定時間間隔內做一次備份,可能會造成最後一次數據丟失
  • fork時,內存中的數據被克隆一份,大致2倍的數據膨脹需要考慮

AOF持久化數據的優缺點:

優勢:

  • 該機制可以帶來更高的數據安全性,即數據持久性。Redis中提供了3中同步策略,即每秒同步、每修改同步和不同步。
  • 由於該機制對日誌文件的寫入操作採用的是append模式,因此在寫入過程中即使出現宕機現象,也不會破壞日誌文件中已經存在的內容。

劣勢:

  • 對於相同數量的數據集而言,AOF文件通常要大於RDB文件。RDB 在恢復大數據集時的速度比 AOF 的恢復速度要快。
  • 根據同步策略的不同,AOF在運行效率上往往會慢於RDB。