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