最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Redis為什么選擇單線程?Redis為什么這么快?

 更新時(shí)間:2023年03月21日 08:22:16   作者:哪吒編程  
這篇文章主要介紹了Redis為什么選擇單線程?Redis為什么這么快?的相關(guān)資料,需要的朋友可以參考下

今天搞一下經(jīng)典面試題Redis為什么選擇單線程?Redis為什么這么快?,實(shí)現(xiàn)快速入門,豐富個(gè)人簡歷,提高面試level,給自己增加一點(diǎn)談資,秒變面試小達(dá)人,BAT不是夢。

一、Redis版本迭代

Redis為什么選擇單線程?Redis為什么這么快?_主線程

Redis2.6,支持lua腳本;

Redis3.0,支持集群;

Redis4.0,混合持久化,多線程異步刪除;

Redis5.0,核心代碼重構(gòu);

Redis6.0,多線程IO;

Redis7.0,F(xiàn)unction、Multi-part-AOF;

二、Redis4.0之前為什么一直采用單線程?

1、Redis采用單線程模型方便開發(fā)和維護(hù);

2、單線程模型也可以通過IO多路復(fù)用和非阻塞IO并發(fā)處理多客戶端請(qǐng)求;

3、對(duì)于Redis來說,主要的性能瓶頸是內(nèi)存和網(wǎng)絡(luò),而不是CPU;

三、Redis6.0引入多線程

Redis6.0之前,Redis從網(wǎng)絡(luò)IO處理到實(shí)際的讀寫命令處理,都是單線程的,只不過在數(shù)據(jù)刪除、數(shù)據(jù)持久化的時(shí)候使用的是多線程。

Redis的性能瓶頸主要是網(wǎng)絡(luò)IO,因此,Redis6.0開始,采用多個(gè)IO線程來處理網(wǎng)絡(luò)請(qǐng)求,提高網(wǎng)絡(luò)請(qǐng)求處理的并行度。

四、Redis主線程和IO線程是如何完成請(qǐng)求的?

Redis為什么選擇單線程?Redis為什么這么快?_多線程_02

1、服務(wù)端和客戶端建立socket連接

主線程負(fù)責(zé)建立連接,并把socket放入全局等待隊(duì)列,主線程通過輪詢的方法將socket連接分配給IO線程。

2、IO線程讀取并解析請(qǐng)求

主線程一旦把socket分配給IO線程,就會(huì)進(jìn)入阻塞狀態(tài),等待IO線程完成客戶端請(qǐng)求,此時(shí),采用多個(gè)IO線程并行處理。

3、主線程執(zhí)行請(qǐng)求命令

IO線程解析完請(qǐng)求,主線程還是會(huì)以單線程的方式執(zhí)行這些命令。

4、IO線程會(huì)寫回socket和主線程清空全局隊(duì)列

當(dāng)主線程執(zhí)行完請(qǐng)求命令后,會(huì)將結(jié)果寫入緩沖區(qū),主線程進(jìn)入阻塞狀態(tài),等待IO線程將結(jié)果回寫到socket中,并返回給客戶端。

回寫socket完畢后,主線程清空全局隊(duì)列。

五、IO多路復(fù)用是什么?

IO多路復(fù)用,一種同步的IO模型,實(shí)現(xiàn)一個(gè)線程監(jiān)視多個(gè)文件句柄,一旦某個(gè)文件句柄就緒就能夠通知到對(duì)用的應(yīng)用程序進(jìn)行對(duì)應(yīng)的讀寫操作,沒有文件句柄就緒時(shí),程序就會(huì)進(jìn)入阻塞狀態(tài),釋放CPU資源。

1、IO,操作系統(tǒng)層面指數(shù)據(jù)在內(nèi)核態(tài)和用戶態(tài)之間進(jìn)行的讀寫操作;

2、多路,多個(gè)客戶端socket連接;

3、復(fù)用,復(fù)用線程;

4、IO多路復(fù)用,使用單線程就能夠同時(shí)處理多個(gè)客戶端socket連接;

客戶端socket對(duì)應(yīng)的文件描述符FileDescriptor注冊(cè)進(jìn)epoll,epoll會(huì)監(jiān)聽哪些socket有消息,避免大量的無用操作。

此時(shí)socket采用非阻塞模式,整個(gè)過程只在調(diào)用select、poll、epoll時(shí)才會(huì)阻塞,收到客戶端消息不會(huì)阻塞,這個(gè)進(jìn)程就會(huì)被充分利用起來,這種模式一般被稱為事件驅(qū)動(dòng),也就是reactor反應(yīng)模式。

采用epoll的方式,最終目的是提高服務(wù)器的吞吐能力。

IO多路復(fù)用與epoll函數(shù)才是**“Redis為什么這么快?”**的直接原因。

六、總結(jié)

Redis是一個(gè)基于內(nèi)存操作、KV形式的數(shù)據(jù)庫,采取多路復(fù)用、非阻塞IO、避免了不必要的上下文切換等特性。

Redis一直存在BigKey問題,因此在Redis4.0引入了多線程異步刪除,正式打開Redis多線程新篇章。

Redis6.0引入IO多線程的讀寫,更高效的處理請(qǐng)求,Redis只是將IO讀寫變成了多線程,命令的執(zhí)行還是由主線程單線程執(zhí)行,因此,多線程下操作Redis不會(huì)出現(xiàn)線程安全的問題,不用像Java那樣加鎖,解鎖,這也是Redis為什么這么快的根本原因。

到此這篇關(guān)于Redis為什么選擇單線程?Redis為什么這么快?的文章就介紹到這了,更多相關(guān)Redis線程與Redis快的原因內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • redis 用scan指令 代替keys指令(詳解)

    redis 用scan指令 代替keys指令(詳解)

    下面小編就為大家分享一篇redis 用scan指令 代替keys指令詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • Redis中管道操作pipeline的實(shí)現(xiàn)

    Redis中管道操作pipeline的實(shí)現(xiàn)

    RedisPipeline是一種優(yōu)化客戶端與服務(wù)器通信的技術(shù),通過批量發(fā)送和接收命令減少網(wǎng)絡(luò)往返次數(shù),提高命令執(zhí)行效率,本文就來介紹一下Redis中管道操作pipeline的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-03-03
  • Redis過期監(jiān)聽機(jī)制,訂單超時(shí)自動(dòng)取消方式

    Redis過期監(jiān)聽機(jī)制,訂單超時(shí)自動(dòng)取消方式

    這篇文章主要介紹了Redis過期監(jiān)聽機(jī)制,訂單超時(shí)自動(dòng)取消方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • SpringSession通過Redis統(tǒng)計(jì)在線用戶數(shù)量的實(shí)現(xiàn)代碼

    SpringSession通過Redis統(tǒng)計(jì)在線用戶數(shù)量的實(shí)現(xiàn)代碼

    這篇文章主要介紹了SpringSession通過Redis統(tǒng)計(jì)在線用戶數(shù)量,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-04-04
  • Redis 使用跳表實(shí)現(xiàn)有序集合的方法

    Redis 使用跳表實(shí)現(xiàn)有序集合的方法

    Redis有序集合底層為什么使用跳表而非其他數(shù)據(jù)結(jié)構(gòu)如平衡樹、紅黑樹或B+樹的原因在于其特殊的設(shè)計(jì)和應(yīng)用場景,跳表提供了與平衡樹類似的效率,同時(shí)實(shí)現(xiàn)更簡單,調(diào)試和修改也更加容易,感興趣的朋友一起看看吧
    2024-09-09
  • 為Java項(xiàng)目添加Redis緩存的方法

    為Java項(xiàng)目添加Redis緩存的方法

    Redis一般有Linux和Windows兩種安裝方式,本文就這兩種方式給大家詳細(xì)介紹,對(duì)java項(xiàng)目添加redis緩存相關(guān)知識(shí),感興趣的朋友一起看看吧
    2021-05-05
  • 基于?Spring?Aop?環(huán)繞通知實(shí)現(xiàn)?Redis?緩存雙刪功能(示例代碼)

    基于?Spring?Aop?環(huán)繞通知實(shí)現(xiàn)?Redis?緩存雙刪功能(示例代碼)

    基于 spring aop 常規(guī)應(yīng)用場景多是用于日志記錄以及實(shí)現(xiàn) redis 分布式鎖,在 github 中也有項(xiàng)目是把它拿來當(dāng)作緩存的異常捕捉,這篇文章主要介紹了基于?Spring?Aop?環(huán)繞通知實(shí)現(xiàn)?Redis?緩存雙刪,需要的朋友可以參考下
    2022-08-08
  • Redis生成全局唯一ID的實(shí)現(xiàn)方法

    Redis生成全局唯一ID的實(shí)現(xiàn)方法

    全局唯一ID生成器是一種在分布式系統(tǒng)下用來生成全局唯一ID的工具,本文主要介紹了Redis生成全局唯一ID的實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2022-06-06
  • Redis安裝配置與常用命令

    Redis安裝配置與常用命令

    Redis 是一款開源的,基于 BSD 許可的,高級(jí)鍵值 (key-value) 緩存 (cache) 和存儲(chǔ) (store) 系統(tǒng)。由于 Redis 的鍵包括 string,hash,list,set,sorted set,bitmap 和 hyperloglog,所以常常被稱為數(shù)據(jù)結(jié)構(gòu)服務(wù)器。
    2018-03-03
  • Redis的常用命令小結(jié)

    Redis的常用命令小結(jié)

    本文主要介紹了Redis的常用命令小結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06

最新評(píng)論

乐亭县| 蒙城县| 米脂县| 丹巴县| 张掖市| 渑池县| 西丰县| 临沭县| 瓦房店市| 中西区| 卫辉市| 余江县| 奈曼旗| 加查县| 巴东县| 镇远县| 武隆县| 东兰县| 乌恰县| 抚顺县| 饶河县| 冀州市| 曲麻莱县| 张北县| 九龙坡区| 庆城县| 诸城市| 逊克县| 麟游县| 枝江市| 信丰县| 广水市| 巴林左旗| 余姚市| 龙南县| 灵川县| 霍州市| 永城市| 林西县| 景宁| 邛崃市|