一文搞透Redis是單線程還是多線程?
當前位置:點晴教程→知識管理交流
→『 技術文檔交流 』
Redis是單線程還是多線程,這個是大廠面試經常被問到的話題,下面我就全面詳解Redis是單線程還是多線程。 Redis單線程 Redis 在 4.0 之前使用單線程的模式,即網絡 IO ,以及鍵值存儲服務是由?個線程來完成的。 為什么采用單線程,主要是有以下幾點原因: 1.單線程高效 使用單線程模式的 Redis,其開發和維護會更簡單,因為單線程模型方便開發和調試。 2.基于內存操作 Redis的所有數據都是存在內存中的對于,基于內存速度是非常高的,運算都是內存級別的,能夠達到一秒內處理10萬個請求,所以他的性能比較高。 3.IO多路復用 Redis使用了IO多路復用弄能用來監聽多個連接客戶端,由于絕大多數操作是純內存的,所以處理的速度會非常快,這樣就可以使用一個線程連接來處理多個請求。
4.避免上下文切換 因為是單線程模型,因此就避免了不必要的上下文切換和多線程競爭,這就省去了多線程切換帶來的時間和性能上的開銷,而且單線程不會導致死鎖的問題發生。 對于 Redis 而言,主要的性能瓶頸是內存或者網絡帶寬,而并非 CPU。 Redis多線程Redis的核心是單線程,但是也會有多線程的來解決部分功能,這樣可以更快的提升Redis性能。 1.Redis網絡IO處理 Redis6.0之前,Redis從網絡IO處理到實際的讀寫命令處理,都是單線程的,但是Redis的性能瓶頸主要是網絡IO。 因此Redis6.0開始,采用多個IO線程來處理網絡請求,提高網絡請求處理的并行度。 Redis只是將IO讀寫變成了多線程,命令的執行還是由主線程單線程執行,因此,多線程下操作Redis不會出現線程安全的問題。 2.持久化多線程 當Redis持久化 AOF 文件過大時,Redis 可以在后臺創建一個子進程,將 AOF 文件進行重寫,子進程可以使用多線程來并發處理 AOF 文件的內容,提高重寫速度。 3.異步刪除多線程 主要是為了解決刪除數據較慢引起卡頓的問題,他的相關指令有三個:UNLINK、FLUSHALL ASYNC和 FLUSHDB ASYNC,這樣就可以把刪除工作放在后臺進行。 需要注意的是,盡管 Redis 使用了多線程,但是 Redis 的核心仍然是單線程的,所有的數據操作都是在單線程中執行的。 閱讀原文:原文鏈接 該文章在 2025/7/2 0:15:01 編輯過 |
關鍵字查詢
相關文章
正在查詢... |