redis 單線程與多線程
Redis是單線程,主要是指Redis的網絡IO和鍵值對讀寫是由一個線程來完成的,Redis在處理客戶端的請求時包含獲取(socket讀)、解析、執行、內容返回(socket寫)等都由一個順序串行的主線程處理,這就是所謂的“單線程”。這也是redis對外提供鍵值存儲服務的主要流程。
但Redis的其他功能,比如持久化RDB、AOF、異步刪除、集群數據同步等等,其實是由額外的線程執行的。Redis命令工作線程是單線程的,但是,整個Redis來說,是多線程的。
Redis 3.X單線程時代但性能依舊很快的原因?
官網解釋
Redis4之前一直使用單線程的原因
Redis單線程的煩惱??
使用惰性刪除可以有效的避免redis卡頓的問題
對于Reids主要的性能瓶頸是內存或者網絡帶寬而非CPU
redis6與7 真正的多線程登場
主線程和IO線程是怎么協作完成請求處理的?
Unix網絡編程中的5種IO模型
Linux世界一切皆文件
文件描述符
I/O 多路復用
一種同步的IO模型,實現一個線程監視多個文件句柄,一旦某個文件句柄就緒就能夠通知到對應應用程序進行相應的讀寫操作,沒有文件句柄就緒時就會阻塞應用程序,從而釋放CPU資源。
I/O 多路復用場景分析
I/O多路復用簡易理解
只使用一個服務端進程可以同時處理多個套接字描述符連接
Redis為什么這樣快?
I/O多路復用1+epoll函數使用,才是redis為什么這么快的直接原因,而不是僅僅單線程指令+redis安裝在內存中。
簡單說明
Redis工作線程是單線程的,但是整個Redis來說,是多線程的。
主線程和IO線程是怎么協作完成請求處理的?
結論
Redis7默認是否開啟了多線程?
如果你在實際應用中,發現Redis實例的CPU開銷不大但吞吐量卻沒有提升,可以考慮使用Redis7的多線程機制,加速網絡處理,進而提升實例的吞吐量。
總結
視頻鏈接–學習地址
Redis 單線程與多線程