Redis底層函數詳解 1. serverCron 函數 它負責管理伺服器的資源,並維持伺服器的正常運行。在執行 serverCron 函數的過程中會調用相關的子函數,如 trackOperationsPerSecond、SigtermHandler、clientsCron、databasesCro ...
Redis底層函數詳解
-
serverCron 函數
它負責管理伺服器的資源,並維持伺服器的正常運行。在執行 serverCron 函數的過程中會調用相關的子函數,如 trackOperationsPerSecond、SigtermHandler、clientsCron、databasesCron 等函數。預設情況下,每隔 100 毫秒執行一次 serverCron 函數
-
trackOperationsPerSecond 函數
是 serverCron 函數的一個子函數。採用抽樣計算的方式,計算並記錄伺服器在最近 1 秒內處理的命令請求數量。可以通過 INFO stats 命令來查看(instantaneous_ops_per_sec 屬性)
127.0.0.1:6379> info stats # Stats total_connections_received:1 total_commands_processed:4 instantaneous_ops_per_sec:0 total_net_input_bytes:133 total_net_output_bytes:5948156 instantaneous_input_kbps:0.00 instantaneous_output_kbps:0.00 rejected_connections:0 sync_full:0 sync_partial_ok:0 sync_partial_err:0 expired_keys:0 evicted_keys:0 keyspace_hits:0 keyspace_misses:0 pubsub_channels:0 pubsub_patterns:0 latest_fork_usec:0 migrate_cached_sockets:0
-
sigtermHandler 函數
sigtermHandler 函數是一個 Redis 伺服器進程的 SIGTERM 信號關聯處理器。在 Redis 伺服器啟動的時候會調用執行 sigtermHandler 函數,它負責在伺服器接收到 SIGTERM 信號時,打開伺服器狀態的 shutdown_asap 標識。
在每次執行伺服器資源管理函數 serverCron 的時候,都會先對伺服器狀態的 shutdown_asap 屬性的值進行判斷,再決定是否關閉伺服器。當 shutdown_asap 屬性的值為 1 時,關閉伺服器;當 shutdown_asap 屬性的值為 0 時,什麼也不做。
-
clientsCron 函數
它會對一定數量的客戶端進行如下檢查。
● 檢查這個客戶端與伺服器的連接是否已經超時。如果連接已經超時(在很長一段時間內,客戶端與伺服器之間沒有進行交互),則釋放這個客戶端的連接。
● 檢查這個客戶端的輸入緩存區的大小,以便對伺服器的記憶體進行管理。如果客戶端在上一次執行命令請求後,輸入緩衝區的大小超過了一定的限制,那麼程式會釋放這個客戶端的輸入緩存區,然後重新為這個客戶端創建一個預設大小的輸入緩衝區,以此來防止客戶端的輸入緩衝區消耗更多記憶體。
-
databasesCron 函數
它的作用是對伺服器中的部分資料庫進行檢查,查找出過期的鍵,然後刪除它們,並對 Redis 數據字典進行相關的收縮操作等。