tft每日頭條

 > 圖文

 > 讓人秒懂的redis的事件處理機制

讓人秒懂的redis的事件處理機制

圖文 更新时间:2025-02-11 18:16:21

Redis服務器是一個事件驅動的程序,有以下兩類事件:

  • 文件事件:Redis服務器通過套接字與客戶端或者其他的Redis服務器連接,而文件事件就是服務器套接字操作的抽象。與客戶端或者其它服務器通信産生相應的文件事件,服務器通過監聽處理這些事件來完成一系列的網絡通信操作。
  • 時間事件:Redis服務器中的一些操作(如serverCron函數)需要在給定的時間點執行,而時間事件就是服務器對這類定時操作的抽象。

讓人秒懂的redis的事件處理機制(圖解Redis-事件實現機制)1

時間處理器結構

文件事件

Redis基于Reactor模式開發了自己的網絡事件處理器,利用IO多路複用程序來監聽套接字,當監聽到連接應答、讀取、寫入、關閉等操作是,就會調用對應關聯的事件處理器來處理。

文件事件處理器結構

讓人秒懂的redis的事件處理機制(圖解Redis-事件實現機制)2

文件處理器結構

Redis的事件框架由:I/O多路複用程序、aeMain主線程、事件分派、事件隊列等幾個核心元素組成,aeMain主線程一直輪詢事件隊列中就緒的I/O事件,然後通過事件綁定的處理器來處理業務。

文件事件執行過程

讓人秒懂的redis的事件處理機制(圖解Redis-事件實現機制)3

事件處理的過程

  • 服務器接收到客戶端發送的建立連接請求
  • 多路複用程序産生AE_READABLE事件發送至事件隊列
  • 連接應答處理器接收到事件,開始創建socket并将AE_READABLE事件與命令請求處理器關聯,連接建立成功,等待接收客戶端後續操作
  • 服務器接收到客戶端發送的命令請求
  • 多路複用程序産生AE_READABLE事件,發送至事件隊列
  • 命令請求處理器接收到事件,并從socket中讀取出命令信息并開始執行命令,同時将socket的AE_WRITABLE事件與命令回複處理器關聯
  • 多路複用程序産生AE_WRITABLE事件,并發送至事件隊列
  • 命令回複處理器接收到事件,開始向socket輸出本地操作的執行結果給客戶端,将socket的AE_WRITABLE事件與命令回複處理器解除關聯
時間事件

Redis的時間事件分為兩種,定時事件:讓一個函數在指定的時間之後執行一次;周期性任務:讓一個函數每間隔指定時間執行一次;時間事件是基于serverCron函數實現,該函數主要對服務器自身資源和狀态檢查和調整,确保服務器的長期、穩定運行,具體工作詳見本文中事件的調度執行。

事件的調度執行

讓人秒懂的redis的事件處理機制(圖解Redis-事件實現機制)4

事件的調度執行過程

  • apiPoll函數阻塞并等待文件事件産生,該方法避免了服務器對時間事件進行頻繁的輪詢,該函數有阻塞過期,時間到達立即返回
  • 文件事件的到達是随機的,随着文件事件的執行,時間事件的到達時間開始接近,當時間事件執行時間到達後服務器開始執行時間事件
  • 文件事件與時間事件都是同步、有序、原子的執行的,整個過程盡量減少阻塞時間,耗時相對久的函數都會設置run_with_period(最大運行時長),當執行耗時比較久的函數時,Redis會采用子線程或子進程的方式來異步處理,比如持久化操作。
  • Redis 6.0對processEvents流程進行了優化,引入多線程模型提升eventLoop 處理效率,詳見:Redis多線程處理模型

以上就是Redis事件實現機制的介紹,如果各位還想了解更多,歡迎轉發評論 關注,Redis圖解系列專欄持續更新中。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关圖文资讯推荐

热门圖文资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved