redis多路復用如何保證順序?
redis是一個單進程單線程的內存數據庫,主要用來作為緩存系統。采用了網絡io多路復用技術來保證在多連接的時候的系統的吞吐量
因為redis是單線程的,所有的操作都是按照順序線性執行的,但是由于讀寫操作是阻塞的,所以某個請求假如是阻塞的話那么整個進程都無法對其他客戶端提供服務。所以就有了io多路復用
redis的io多路復用模型是基于epoll實現的,多路復用技術還有select,poll。選擇epoll實現的原因就是epoll有以下優點:
1.epoll沒有最大并發連接的限制,上限是最大可以打開文件的數目
2.效率更高,epoll只管活躍的連接,而與連接總數無關
3.內存使用上epoll使用了共享內存,所以內存拷貝也省略了
其實io多路復用就是通過一種機制,可以監視多個描述符,一旦某個描述符就緒,就能夠通知程序進行相應的操作(通過監視描述符,將對數據庫的操作轉換成了事件,從而減少了線程切換時上下文的切換和競爭)