国产一区二区精品-国产一区二区精品久-国产一区二区精品久久-国产一区二区精品久久91-免费毛片播放-免费毛片基地

千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機構(gòu)

手機站
千鋒教育

千鋒學習站 | 隨時隨地免費學

千鋒教育

掃一掃進入千鋒手機站

領(lǐng)取全套視頻
千鋒教育

關(guān)注千鋒學習站小程序
隨時隨地免費學習課程

當前位置:首頁  >  技術(shù)干貨  > Redis文件事件的模型?

Redis文件事件的模型?

來源:千鋒教育
發(fā)布人:wjy
時間: 2022-09-19 11:38:47 1663558727

  Redis基于Reactor模式開發(fā)了自己的網(wǎng)絡(luò)事件處理器,也就是文件事件處理器。文件事件處理器使用IO多路復用技術(shù),同時監(jiān)聽多個套接字,并為套接字關(guān)聯(lián)不同的事件處理函數(shù)。當套接字的可讀或者可寫事件觸發(fā)時,就會調(diào)用相應(yīng)的事件處理函數(shù)。

  1. 為什么單線程的 Redis 能那么快?

  Redis的瓶頸主要在IO而不是CPU,所以為了省開發(fā)量,在6.0版本前是單線程模型;其次,Redis 是單線程主要是指 Redis 的網(wǎng)絡(luò) IO 和鍵值對讀寫是由一個線程來完成的,這也是 Redis 對外提供鍵值存儲服務(wù)的主要流程。(但 Redis 的其他功能,比如持久化、異步刪除、集群數(shù)據(jù)同步等,其實是由額外的線程執(zhí)行的)。

  Redis 采用了多路復用機制使其在網(wǎng)絡(luò) IO 操作中能并發(fā)處理大量的客戶端請求,實現(xiàn)高吞吐率。

  2. Redis事件響應(yīng)框架ae_event及文件事件處理器

  Redis并沒有使用 libevent 或者 libev 這樣的成熟開源方案,而是自己實現(xiàn)一個非常簡潔的事件驅(qū)動庫 ae_event。@pdai Redis 使用的IO多路復用技術(shù)主要有:select、epoll、evport和kqueue等。每個IO多路復用函數(shù)庫在 Redis 源碼中都對應(yīng)一個單獨的文件,比如ae_select.c,ae_epoll.c, ae_kqueue.c等。Redis 會根據(jù)不同的操作系統(tǒng),按照不同的優(yōu)先級選擇多路復用技術(shù)。事件響應(yīng)框架一般都采用該架構(gòu),比如 netty 和 libevent。

Redis文件事件的模型1

 

  如下圖所示,文件事件處理器有四個組成部分,它們分別是套接字、I/O多路復用程序、文件事件分派器以及事件處理器。

Redis文件事件的模型2

 

  文件事件是對套接字操作的抽象,每當一個套接字準備好執(zhí)行 accept、read、write和 close 等操作時,就會產(chǎn)生一個文件事件。因為 Redis 通常會連接多個套接字,所以多個文件事件有可能并發(fā)的出現(xiàn)。

  I/O多路復用程序負責監(jiān)聽多個套接字,并向文件事件派發(fā)器傳遞那些產(chǎn)生了事件的套接字。

  盡管多個文件事件可能會并發(fā)地出現(xiàn),但I/O多路復用程序總是會將所有產(chǎn)生的套接字都放到同一個隊列(也就是后文中描述的aeEventLoop的fired就緒事件表)里邊,然后文件事件處理器會以有序、同步、單個套接字的方式處理該隊列中的套接字,也就是處理就緒的文件事件。

Redis文件事件的模型3

tags:
聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
10年以上業(yè)內(nèi)強師集結(jié),手把手帶你蛻變精英
請您保持通訊暢通,專屬學習老師24小時內(nèi)將與您1V1溝通
免費領(lǐng)取
今日已有369人領(lǐng)取成功
劉同學 138****2860 剛剛成功領(lǐng)取
王同學 131****2015 剛剛成功領(lǐng)取
張同學 133****4652 剛剛成功領(lǐng)取
李同學 135****8607 剛剛成功領(lǐng)取
楊同學 132****5667 剛剛成功領(lǐng)取
岳同學 134****6652 剛剛成功領(lǐng)取
梁同學 157****2950 剛剛成功領(lǐng)取
劉同學 189****1015 剛剛成功領(lǐng)取
張同學 155****4678 剛剛成功領(lǐng)取
鄒同學 139****2907 剛剛成功領(lǐng)取
董同學 138****2867 剛剛成功領(lǐng)取
周同學 136****3602 剛剛成功領(lǐng)取
相關(guān)推薦HOT
快速通道