Redis單機版本框架

Redis主流程僞代碼

def main():
 init_server()
 
 while server_is_not_shutdown():
       time = aeSearchNearestTimer()
       beforeSleep()
       aeApiPoll(time)
       processFileEvents()
       processTimeEvents()
 
 clean_server()

Redis main函數調用流程圖及關鍵節點

圖片描述

一條簡單的set命令的執行流程

圖片描述

serverCron函數的功能

圖片描述

Q&A

1.bgsave執行時再次執行bgsave如何處理?linux

直接返回,返回信息會通知正在執行.redis

若是在aof rewrite時執行bgsave,會直接返回不能執行.分佈式

看代碼此處應該有bgsave schedule命令,若是此時在執行aof rewrite,則會在aof結束後在serverCron中執行。函數

代碼以下 測試

圖片描述
2.aof rewrite正在執行時再次發送bgrewriteaof會如何處理?spa

直接返回,返回信息通知正在執行rest

若是此時在執行rdbsave,則會在serverCron中在rdbsave結束以後執行aof rewrite.code

代碼以下:server

圖片描述
3.bgsave時若是master還在執行寫入,因爲linux COW機制,此時會給子進程拷貝一份數據,致使雙倍內存。進程

待在測試環境驗證是否會出現

4.client端發送的命令可否在server端保證順序?

5.爲何redis自己支持分佈式生產環境還在使用codis?

相關文章
相關標籤/搜索