Redis服務(wù)器重要屬性詳解
-
cronloops 屬性
cronloops 屬性是一個計數(shù)器鹰贵,用于記錄服務(wù)器的 serverCron 函數(shù)被執(zhí)行的次數(shù)晴氨,是一個 int 類型的整數(shù)。
-
rdb_child_pid 與 aof_child_pid 屬性
rdb_child_pid 和 aof_child_pid 屬性用于檢查 Redis 服務(wù)器持久化操作的運(yùn)行狀態(tài)碉输,它們記錄執(zhí)行 BGSAVE 和 BGREWRITEAOF 命令的子進(jìn)程的 ID籽前。也常常使用這兩個屬性來判斷 BGSAVE 和 BGREWRITEAOF 命令是否正在被執(zhí)行。
當(dāng)執(zhí)行 serverCron 函數(shù)時敷钾,會檢查 rdb_child_pid 和 aof_child_pid 屬性的值枝哄,只要其中一個屬性的值不等于-1,程序就會調(diào)用一次 wait3 函數(shù)來判斷子進(jìn)程是否發(fā)送信號到服務(wù)器中阻荒。
如果沒有信號到達(dá)挠锥,則表示服務(wù)器持久化操作沒有完成,程序不做任何處理侨赡。而如果有信號到達(dá)蓖租,那么,針對 BGSAVE 命令羊壹,表示新的 RDB 文件已經(jīng)成功生成蓖宦;針對 BGREWRITEAOF 命令,表示新的 AOF 文件生成完畢舶掖,然后服務(wù)器繼續(xù)執(zhí)行相應(yīng)的后續(xù)操作球昨。比如尔店,將舊的 RDB 文件或 AOF 文件替換為新的 RDB 文件或 AOF 文件眨攘。
另外主慰,當(dāng) rdb_child_pid 和 aof_child_pid 屬性的值都為-1 時,表示此時的服務(wù)器沒有執(zhí)行持久化操作鲫售,這時程序會做出如下判斷共螺。
(1)判斷 BGREWRITEAOF 命令的執(zhí)行是否被延遲了(通過下文所講aof_rewrite_scheduled 屬性)。如果被延遲了情竹,則重新執(zhí)行一次 BGREWRITEAOF 命令藐不。
(2)判斷是否滿足服務(wù)器的自動保存條件。如果滿足服務(wù)器的自動保存條件秦效,并且服務(wù)器沒有執(zhí)行其他持久化操作雏蛮,那么服務(wù)器將開始執(zhí)行 BGSAVE 命令。
(3)判斷是否滿足服務(wù)器設(shè)置的 AOF 重寫條件阱州。如果條件滿足挑秉,同時服務(wù)器沒有執(zhí)行其他持久化操作,那么服務(wù)器將重新執(zhí)行 BGREWRITEAOF 命令苔货。
-
stat_peak_memory 屬性
stat_peak_memory 屬性用于記錄 Redis 服務(wù)器的內(nèi)存峰值大小犀概。在每次執(zhí)行 serverCron 函數(shù)時,程序都會檢查服務(wù)器當(dāng)前內(nèi)存的使用情況夜惭,并與 stat_peak_memory 屬性保存的上一次內(nèi)存峰值大小進(jìn)行比較姻灶。如果當(dāng)前的內(nèi)存峰值大小大于 stat_peak_memory 屬性保存的值,就將當(dāng)前最新的內(nèi)存峰值大小賦給 stat_peak_memory 屬性诈茧。
在執(zhí)行 INFO memory 命令后产喉,返回的 used_memory_peak 和 used_memory_peak_human 屬性分別以兩種格式記錄了服務(wù)器的內(nèi)存峰值大小。
127.0.0.1:6379> info memory # Memory used_memory:689352 used_memory_human:673.20K used_memory_rss:652424 used_memory_rss_human:637.13K used_memory_peak:689352 used_memory_peak_human:673.20K total_system_memory:0 total_system_memory_human:0B used_memory_lua:37888 used_memory_lua_human:37.00K maxmemory:0 maxmemory_human:0B maxmemory_policy:noeviction mem_fragmentation_ratio:0.95 mem_allocator:jemalloc-3.6.0
-
lruclock 屬性
lruclock 屬性是一種服務(wù)器時間緩存若皱,它記錄了服務(wù)器的 LRU 時鐘镊叁。在默認(rèn)情況下,serverCron 函數(shù)會以每 10 秒一次的頻率更新 lruclock 屬性的值走触。LRU 時鐘不是實(shí)時的晦譬,它只是一個模糊的估計值。
Redis 的每個對象都有一個 lru 屬性互广,該屬性記錄了這個對象最后一次被命令訪問的時間敛腌。使用 lruclock 屬性的值減去 lru 屬性的值,就能計算出這個對象的空轉(zhuǎn)時間惫皱。
可以使用 INFO server 命令的 lru_clock 屬性來查看當(dāng)前 LRU 時鐘的時間
127.0.0.1:6379> info server # Server redis_version:3.2.100 redis_git_sha1:00000000 redis_git_dirty:0 redis_build_id:dd26f1f93c5130ee redis_mode:standalone os:Windows arch_bits:64 multiplexing_api:WinSock_IOCP process_id:15428 run_id:3bd0b4b68b5d6df82688e2b316a21ef9224da5a1 tcp_port:6379 uptime_in_seconds:1299 uptime_in_days:0 hz:10 lru_clock:8416198 executable:F:\redis\redis-server.exe config_file:F:\redis\redis.windows.conf
-
mstime 與 unixtime 屬性
mstime 和 unixtime 屬性記錄了服務(wù)器當(dāng)前的時間像樊。在默認(rèn)情況下,serverCron 函數(shù)會以每 100 毫秒一次的頻率更新 mstime 和 unixtime 屬性旅敷,它們記錄的時間值并不是最準(zhǔn)確的生棍。
-
aof_rewrite_scheduled 屬性
aof_rewrite_scheduled 屬性用于記錄服務(wù)器中 BGREWRITEAOF 命令執(zhí)行是否被延遲。當(dāng) aof_rewrite_scheduled 屬性的值為 1 時媳谁,表示執(zhí)行 BGREWRITEAOF 命令超時了涂滴。在服務(wù)器執(zhí)行 BGSAVE 命令時友酱,如果客戶端發(fā)送了 BGREWRITEAOF 命令請求,那么服務(wù)器在接收到命令請求之后柔纵,會將 BGREWRITEAOF 命令延遲到 BGSAVE 命令執(zhí)行成功后再執(zhí)行缔杉。