Redis是基於內存的高效存取的k-v數據庫內存的響應時間大約是100納秒,保證了Redis每秒萬億級別訪問;Redis工作線程是單線程,后來的版本在持久化和刪除過期鍵使用另外的線程,關於單線程如何高效的處理並發的網絡請求,redis使用的是基於react模式(反應器模式,當檢測到一個新的事件,將其發送給相應的Handler去處理)開發的網絡事件處理器被稱為文件事件處理器。組成結構:多個套接字、IO多路復用程序、文件事件分派器、事件處理器。

Redis客戶端對服務端的調用分為發送命令,執行命令,返回結果三個過程,
文件事件處理器使用I/O多路復用(multiplexing)程序來同時監聽多個套接字,並根據套接字目前執行的任務來為套接字關聯不同的事件處理器。當被監聽的套接字准備好執行連接應答(accept)、讀取(read)、寫入(write)、關閉(close)等操作時, 與操作相對應的文件事件就會產生, 這時文件事件處理器就會調用套接字之前關聯好的事件處理器來處理這些事件。盡管多個文件事件可能會並發地出現,但I/O多路復用程序總是會將所有產生事件的套接字都推到一個隊列里面,然后通過這個隊列,以有序(sequentially)、同步(synchronously)、每次一個套接字的方式向文件事件分派器傳送套接字:當上一個套接字產生的事件被處理完畢之后(該套接字為事件所關聯的事件處理器執行完畢), I/O多路復用程序才會繼續向文件事件分派器傳送下一個套接字。
多路復用IO的實現是通過包裝select、epoll、evport和kqueue這些I/O多路復用函數庫來實現的,每個I/O多路復用函數庫在Redis源碼中都對應一個單獨的文件,比如ae_select.c、ae_epoll.c、ae_kqueue.c等,Redis為每個I/O多路復用函數庫都實現了相同的API,所以I/O多路復用程序的底層實現是可以互換的
文件事件的類型分為可讀事件(connect read close)和可寫事件(write),如果一個套接字同時產生了這兩種事件,那么服務器將先讀套接字,后寫套接字。
Redis為文件事件編寫了多個處理器,分別為socket關聯連接、命令請求、命令回復處理器等。