要解決這個問題,首先要了解redis info信息中幾個數據的意義:
used_memory:810575104 //數據占用了多少內存(字節)
used_memory_human:773.02M //數據占用了多少內存(帶單位的,可讀性好)
used_memory_rss:885465088 //redis占用了多少內存
used_memory_rss_human:844.45M //redis占用了多少內存(帶單位的,可讀性好)
used_memory_peak:2001274696 //占用內存的峰值(字節)
used_memory_peak_human:1.86G //占用內存的峰值(帶單位的,可讀性好)
mem_fragmentation_ratio:1.09 //內存碎片率
里面需要注意的有:
used_memory_human,代表redis數據數據占用內存的大小,
used_memory_rss_human,代表服務器時下為redis分配的內存大小,也就是redis具體占用內存的大小
used_memory_peak_human,代表redis在使用期間最高占用了多少內存。
mem_fragmentation_ratio = used_memory_rss / used_memory
mem_fragmentation_ratio,越低越高,趨向於1,大於1的部分redis碎片占用的大小。范圍在1 - 1.5,大於1.5說明碎片過多,必須要清理了。
redis的碎片清理:
redis4.0以前內存碎片過多的情況下只能關閉redis重啟后才能生效。
redis4.0以后新增了配置項:activedefrag
redis的配置項activedefrag默認為no,未開啟,不會自動回收內存清理碎片,
當需要清理碎片的時候,使用命令
config set activedefrag yes
將activedefrag的配置設置為開啟狀態。則redis會自動清理碎片,回收內存。