Redis設實 13 事件 下 時間事件

2021-08-07 02:30:17 字數 1051 閱讀 8835

《redis設計與實現 黃建巨集 著》第11章

該書基於redis2.9,即redis3.0開發版編寫

分2類:

·定時事件

指定時間後執行一次

事件處理器返回ae_nomore,該事件達到一次後被刪除

·週期事件

每隔指定時間執行一次

事件處理器返回非ae_nomore整數值,根據該值更新when屬性,讓該事件在一段時間後再次到達

·id:全域性唯一,遞增分配

·when:毫秒精度unix時間戳,記錄時間事件的到達時間

·timeproc:時間事件處理器,乙個函式,時間事件到達時,伺服器呼叫相應處理器處理事件

伺服器將所有時間事件放在乙個無序鍊錶(when屬性無序)

當時間事件執行器執行時遍歷整個鍊錶,查詢所有已到達的時間事件

然後呼叫相應事件處理器

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

·清理資料庫過期鍵值對

·關閉和清理連線失效客戶端

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

·若伺服器是主伺服器,則對從伺服器進行定期同步

·若伺服器處於集群模式,則對集群進行定期同步和連線測試

1) aeapipoll函式最大阻塞時間,由到達時間最接近當前時間的時間事件決定。該方法既可避免頻繁輪詢時間事件(忙等待),也可確保aeapipoll函式不會阻塞過長時間

2) 因檔案事件隨機出現,若等待並處理完一次檔案事件後仍未有任何時間事件到達,則伺服器將再次等待並處理檔案事件

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

4) 因時間事件在檔案事件後執行,且事件間不會出現搶占,故時間事件實際處理時間通常會比時間事件設定的到達時間稍晚一些

Redis設實 05 整數集合

redis設計與實現 黃建巨集 著 第6章 該書基於redis2.9,即redis3.0開發版編寫 用於儲存整數值的集合抽象資料結構 可儲存型別為int16 t int32 t int64 t的整數值 集合中不會出現重複元素 typedef struct intsetintset 整數集合的底層實現...

Redis設實 06 壓縮列表

redis設計與實現 黃建巨集 著 第7章 該書基於redis2.9,即redis3.0開發版編寫 為節約記憶體而開發 由一系列特殊編碼的連續記憶體塊組成的順序型 sequential 資料結構 可包含任意多個節點 entry 每個節點可儲存乙個位元組陣列或乙個整數值 1個壓縮列表節點可儲存1個位元...

Redis設實 09 資料庫

redis設計與實現 黃建巨集 著 第9章 該書基於redis2.9,即redis3.0開發版編寫 redis伺服器資料結構 typedef structredisserverredisserver redis資料庫資料結構 typedef structredisdbredisdb 注,因資料庫鍵空...