久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

redis事件處理流程的案例分析

154次閱讀
沒有評論

共計 1758 個字符,預計需要花費 5 分鐘才能閱讀完成。

自動寫代碼機器人,免費開通

這篇文章主要介紹了 redis 事件處理流程的案例分析,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓丸趣 TV 小編帶著大家一起了解一下。

前言:

我們知道 redis 服務器是一個事件驅動程序,它需要處理兩類事件,分別是文件事件和時間事件。

那么 redis 事件處理流程是什么樣的呢?我們一起來看看下面的圖:

redis 事件處理流程的案例分析

aeMain 函數通過調用 aeProcessEvents 函數來進行文件事件和時間事件的調度和執(zhí)行。aeEventLoop 中記錄了事件相關的信息。首先通過 aeSearchNearestTimer 函數獲取最短的時間事件的執(zhí)行時間間隔 n,然后調用 aeApiPoll 函數獲取監(jiān)聽到的套接字,最后執(zhí)行與套接字向對應的事件處理函數 rfileProc 和 wfileProc,最后再執(zhí)行時間事件函數 processTimeEvents

文件事件

Redis 的基于 Reactor 模式開發(fā)了自己的網絡事件處理器,這個處理器被稱為文件事件處理器(file event handler):

文件事件處理器使用 IO 多路復用程序來監(jiān)聽多個套接字,并根據套接字目前執(zhí)行的任務為套接字關聯不同的事件處理器

當被監(jiān)聽的套接字準備好執(zhí)行連接應答(accept)、讀取(read)、寫入(write)、關閉(close)等操作,當文件事件產生時,這些文件事件處理器就會調用套接字之前關聯好的事件處理器來處理事件

文件事件處理器的構成

(學習視頻分享:redis 視頻教程)

redis 事件處理流程的案例分析

文件事件的處理器

Redis 為文件事件編寫了多個處理器:

連接應答處理器:當 Redis 服務器進行初始化是,程序會將這個連接應答處理器和服務監(jiān)聽套件字的 AE_READABLE 事件關聯起來,當有客戶端用 connect 函數連接服務器監(jiān)聽套接字是,套接字就會產生 AE_READABLE 事件,引發(fā)連接應答處理器執(zhí)行,并執(zhí)行相應的套接字應答操作

命令請求處理器:當一個客戶端通過連接應答處理器成功連接到服務器之后,服務器會將客戶端套接字的 AE_READABLE 事件和命令請求處理器關聯起來,當客戶端向服務器發(fā)送命令請求時,套接字就會產生 AE_READABLE 事件,引發(fā)命令請求處理器執(zhí)行,并執(zhí)行相應的套接字讀入操作

命令回復處理器:當服務器有命令回復需要傳遞給客戶端時,服務端會將客戶端套接字的 AE_WRITABLE 事件和命令回復處理器關聯起來,當客戶端準備好接收服務器傳回的命令回復時,就會產生 AE_WRITABLE 事件,引發(fā)命令回復處理器執(zhí)行,并執(zhí)行相應的套接字寫入操作

一次完整的客戶端與服務端連接事件

服務器監(jiān)聽套件字的 AE_READABLE 事件,當客戶端發(fā)送連接請求產生 AE_READABLE 事件,服務端會對客戶端的連接請求進行應答,將客戶端套接字的 AE_READABLE 事件與命令請求處理器關聯,客戶端可以向服務端發(fā)送命令請求了

客戶端向服務端發(fā)送一個命令請求,客戶端套接字將產生 AE_READABLE 事件,引發(fā)命令處理器去執(zhí)行,執(zhí)行命令將產生相應的命令回復,服務端將客戶端套接字的 AE_WRITABLE 事件與命令回復處理器關聯

客戶端嘗試讀取命令回復時,客戶端套接字將產生 AE_WRITABLE 事件,觸發(fā)命令回復處理器執(zhí)行,當命令回復處理器將命令回復全部寫入套接字之后,服務器就會接觸客戶端套接字的 AE_WRITABLE 事件與命令回復處理器之間的關聯

時間事件

Redis 的時間事件分為定時事件和周期性事件。一個時間事件由三個屬性組成:

id:服務器為時間時間創(chuàng)建的全局唯一 IDwhen:記錄了時間時間的到達時間(毫秒精度的 UNIX 時間戳)timeProc:時間事件處理器

redis 事件處理流程的案例分析

服務器所有的時間事件都放在一個無序鏈表中,每當時間事件執(zhí)行器運行時,它就遍歷整個鏈表,查找所有已到達的時間事件,并調用相應的事件處理器。正常模式下的 Redis 服務器只使用 serverCron 一個時間事件,而在 benchmark 模式下,服務器也只使用兩個時間事件,所以不影響事件執(zhí)行的性能。

感謝你能夠認真閱讀完這篇文章,希望丸趣 TV 小編分享的“redis 事件處理流程的案例分析”這篇文章對大家有幫助,同時也希望大家多多支持丸趣 TV,關注丸趣 TV 行業(yè)資訊頻道,更多相關知識等著你來學習!

向 AI 問一下細節(jié)

正文完
 
丸趣
版權聲明:本站原創(chuàng)文章,由 丸趣 2023-12-04發(fā)表,共計1758字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發(fā)布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 梁河县| 菏泽市| 南投市| 平乐县| 北流市| 富顺县| 崇明县| 平舆县| 广水市| 宜宾市| 娄烦县| 资阳市| 中宁县| 舞阳县| 鄂尔多斯市| 久治县| 沁阳市| 石嘴山市| 麻栗坡县| 阳高县| 锡林郭勒盟| 哈密市| 武宁县| 西和县| 仙居县| 黄梅县| 和政县| 丘北县| 同心县| 广南县| 昌邑市| 韶关市| 和田市| 衡阳市| 芜湖县| 呼伦贝尔市| 榆中县| 聂拉木县| 库尔勒市| 澄江县| 大新县|