(面試) redis相關問題
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。
「其他文章」