redis設計與實現讀書筆記 事件

2021-10-07 14:29:15 字數 1977 閱讀 9009

redis伺服器是乙個事件驅動程式,

❑檔案事件(file event):redis伺服器通過套接字與客戶端(或者其他redis伺服器)進行連線,而檔案事件就是伺服器對套接字操作的抽象。伺服器與客戶端(或者其他伺服器)的通訊會產生相應的檔案事件,而伺服器則通過監聽並處理這些事件來完成一系列網路通訊操作。

❑時間事件(time event):redis伺服器中的一些操作(比如servercron函式)需要在給定的時間點執行,而時間事件就是伺服器對這類定時操作的抽象。

redis基於reactor模式開發了自己的網路事件處理器:

這個處理器被稱為檔案事件處理器(fileevent handler):

❑檔案事件處理器使用i/o多路復用(multiplexing)程式來同時監聽多個套接字,並根據套接字目前執行的任務來為套接字關聯不同的事件處理器。

❑當被監聽的套接字準備好執行連線應答(accept)、讀取(read)、寫入(write)、關閉(close)等操作時,與操作相對應的檔案事件就會產生,這時檔案事件處理器就會呼叫套接字之前關聯好的事件處理器來處理這些事件。

套接字、i/o多路復用程式、檔案事件分派器(dispatcher),以及事件處理器。

i/o多路復用程式總是會將所有產生事件的套接字都放到乙個佇列裡面,然後通過這個佇列,以有序(sequentially)、同步(synchronously)、每次乙個套接字的方式向檔案事件分派器傳送套接字。

❑定時事件:讓一段程式在指定的時間之後執行一次。比如說,讓程式x在當前時間的30毫秒之後執行一次。

❑週期性事件:讓一段程式每隔指定時間就執行一次。比如說,讓程式y每隔30毫秒就執行一次。

伺服器將所有時間事件都放在乙個無序鍊錶中,每當時間事件執行器執行時,它就遍歷整個鍊錶,查詢所有已到達的時間事件,並呼叫相應的事件處理器。

這個函式,之前的持久化筆記也記錄過,定時持久化用的,這裡看看還有啥作用:

servercron函式負責執行,它的主要工作包括:

❑更新伺服器的各類統計資訊,比如時間、記憶體占用、資料庫占用情況等。

❑清理資料庫中的過期鍵值對。

❑關閉和清理連線失效的客戶端。

❑嘗試進行aof或rdb持久化操作。

❑如果伺服器是主伺服器,那麼對從伺服器進行定期同步。

❑如果處於集群模式,對集群進行定期同步和連線測試。

對檔案事件和時間事件的處理都是同步、有序、原子地執行的,伺服器不會中途中斷事件處理,也不會對事件進行搶占,因此,不管是檔案事件的處理器,還是時間事件的處理器,它們都會盡可地減少程式的阻塞時間,並在有需要時主動讓出執行權,從而降低造成事件飢餓的可能性

❑redis伺服器是乙個事件驅動程式,伺服器處理的事件分為時間事件和檔案事件兩類。

❑檔案事件處理器是基於reactor模式實現的網路通訊程式。

❑檔案事件是對套接字操作的抽象:每次套接字變為可應答(acceptable)、可寫(writable)或者可讀(readable)時,相應的檔案事件就會產生。

❑檔案事件分為ae_readable事件(讀事件)和ae_writable事件(寫事件)兩類。

❑時間事件分為定時事件和週期性事件:定時事件只在指定的時間到達一次,而週期性事件則每隔一段時間到達一次。❑伺服器在一般情況下只執行servercron函式乙個時間事件,並且這個事件是週期性事件。

❑檔案事件和時間事件之間是合作關係,伺服器會輪流處理這兩種事件,並且處理事件的過程中也不會進行搶占。❑時間事件的實際處理時間通常會比設定的到達時間晚一些。

《redis設計與實現》讀書筆記

sds dynamic string 比起 c 字串,sds 具有以下優點 len屬性維護字串長度,常數複雜度即可獲取。預先檢查長度是否滿足需求,如果不滿足自動拓展,杜絕緩衝區溢位。空間預分配 惰性空間釋放會減少修改字串長度時所需的記憶體重分配次數。二進位制安全。相容部分 c 字串函式。list 鍊...

redis設計與實現 讀書筆記1

乙個業務模型引出對redis的好奇 提出問題 1.redis 的五種資料型別分別由什麼資料結構實現?2.redis 的字串型別既可以儲存字串,也可以儲存整數和浮點數,甚至是二進位制位 使用setbit redis 內部是如何實現儲存這些值?3.redis的一部分命令只能對特定的資料型別執行 而另一部...

《redis設計與實現》讀書筆記(一)

定時刪除 惰性刪除 定期刪除 描述一過期立馬刪除 下次獲取時再刪除 每隔一段時間批量刪除 優點對記憶體友好 對cpu時間友好 缺點 對cpu時間不友好 對記憶體不友好 aof持久化是通過儲存redis伺服器所執行的寫命令來記錄資料庫狀態。aof持久化的實現 命令追加 寫命令以協議的格式追加到aof ...