Redis服務(wù)器重要屬性詳解
-
cronloops 屬性
cronloops 屬性是一個(gè)計(jì)數(shù)器,用于記錄服務(wù)器的 serverCron 函數(shù)被執(zhí)行的次數(shù),是一個(gè) 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。也常常使用這兩個(gè)屬性來(lái)判斷 BGSAVE 和 BGREWRITEAOF 命令是否正在被執(zhí)行。
當(dāng)執(zhí)行 serverCron 函數(shù)時(shí),會(huì)檢查 rdb_child_pid 和 aof_child_pid 屬性的值,只要其中一個(gè)屬性的值不等于-1,程序就會(huì)調(diào)用一次 wait3 函數(shù)來(lái)判斷子進(jìn)程是否發(fā)送信號(hào)到服務(wù)器中。
如果沒(méi)有信號(hào)到達(dá),則表示服務(wù)器持久化操作沒(méi)有完成,程序不做任何處理。而如果有信號(hào)到達(dá),那么,針對(duì) BGSAVE 命令,表示新的 RDB 文件已經(jīng)成功生成;針對(duì) BGREWRITEAOF 命令,表示新的 AOF 文件生成完畢,然后服務(wù)器繼續(xù)執(zhí)行相應(yīng)的后續(xù)操作。比如,將舊的 RDB 文件或 AOF 文件替換為新的 RDB 文件或 AOF 文件。
另外,當(dāng) rdb_child_pid 和 aof_child_pid 屬性的值都為-1 時(shí),表示此時(shí)的服務(wù)器沒(méi)有執(zhí)行持久化操作,這時(shí)程序會(huì)做出如下判斷。
(1)判斷 BGREWRITEAOF 命令的執(zhí)行是否被延遲了(通過(guò)下文所講aof_rewrite_scheduled 屬性)。如果被延遲了,則重新執(zhí)行一次 BGREWRITEAOF 命令。
(2)判斷是否滿足服務(wù)器的自動(dòng)保存條件。如果滿足服務(wù)器的自動(dòng)保存條件,并且服務(wù)器沒(méi)有執(zhí)行其他持久化操作,那么服務(wù)器將開(kāi)始執(zhí)行 BGSAVE 命令。
(3)判斷是否滿足服務(wù)器設(shè)置的 AOF 重寫(xiě)條件。如果條件滿足,同時(shí)服務(wù)器沒(méi)有執(zhí)行其他持久化操作,那么服務(wù)器將重新執(zhí)行 BGREWRITEAOF 命令。

-
stat_peak_memory 屬性
stat_peak_memory 屬性用于記錄 Redis 服務(wù)器的內(nèi)存峰值大小。在每次執(zhí)行 serverCron 函數(shù)時(shí),程序都會(huì)檢查服務(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ù)器時(shí)間緩存,它記錄了服務(wù)器的 LRU 時(shí)鐘。在默認(rèn)情況下,serverCron 函數(shù)會(huì)以每 10 秒一次的頻率更新 lruclock 屬性的值。LRU 時(shí)鐘不是實(shí)時(shí)的,它只是一個(gè)模糊的估計(jì)值。
Redis 的每個(gè)對(duì)象都有一個(gè) lru 屬性,該屬性記錄了這個(gè)對(duì)象最后一次被命令訪問(wèn)的時(shí)間。使用 lruclock 屬性的值減去 lru 屬性的值,就能計(jì)算出這個(gè)對(duì)象的空轉(zhuǎn)時(shí)間。
可以使用 INFO server 命令的 lru_clock 屬性來(lái)查看當(dāng)前 LRU 時(shí)鐘的時(shí)間
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)前的時(shí)間。在默認(rèn)情況下,serverCron 函數(shù)會(huì)以每 100 毫秒一次的頻率更新 mstime 和 unixtime 屬性,它們記錄的時(shí)間值并不是最準(zhǔn)確的。
-
aof_rewrite_scheduled 屬性
aof_rewrite_scheduled 屬性用于記錄服務(wù)器中 BGREWRITEAOF 命令執(zhí)行是否被延遲。當(dāng) aof_rewrite_scheduled 屬性的值為 1 時(shí),表示執(zhí)行 BGREWRITEAOF 命令超時(shí)了。在服務(wù)器執(zhí)行 BGSAVE 命令時(shí),如果客戶端發(fā)送了 BGREWRITEAOF 命令請(qǐng)求,那么服務(wù)器在接收到命令請(qǐng)求之后,會(huì)將 BGREWRITEAOF 命令延遲到 BGSAVE 命令執(zhí)行成功后再執(zhí)行。