天天看點

Redis面試題-Redis記憶體碎片Redis記憶體碎片

本文參考 嗨客網 Redis面試題

Redis記憶體碎片

檢視Redis記憶體碎片率

在 Redis 使用過程中,經常會産生記憶體碎片,如果我們需要檢視 Redis 的記憶體碎片率,我們可以使用 INFO 指令,具體指令如下:

INFO Memory
           

執行完畢後,如下圖所示:

Redis面試題-Redis記憶體碎片Redis記憶體碎片

其中,mem_fragmentation_ratio 顯示的就是記憶體使用率,其具體的計算公式為:

mem_fragmentation_ratio = used_memory_rss / used_memory
           

其中,used_memory_rss 是 Redis 向作業系統申請的記憶體。used_memory 是 Redis 中的資料占用的記憶體。

記憶體碎片如何産生的

Redis 内部有自己的記憶體管理器,為了提高記憶體使用的效率,來對記憶體的申請和釋放進行管理。Redis 中的值删除的時候,并沒有把記憶體直接釋放,交還給作業系統,而是交給了 Redis 内部有記憶體管理器。

Redis 中申請記憶體的時候,也是先看自己的記憶體管理器中是否有足夠的記憶體可用。Redis 的這種機制,提高了記憶體的使用率,但是會使 Redis 中有部分自己沒在用,卻不釋放的記憶體,導緻了記憶體碎片的發生。

碎片率的意義

mem_fragmentation_ratio 的不同值,說明不同的情況。

  1. 大于1:說明記憶體有碎片,一般在 1 到 1.5 之間是正常的。
  2. 大于1.5:說明記憶體碎片率比較大,需要考慮是否要進行記憶體碎片清理,要引起重視。
  3. 小于1:說明已經開始使用交換記憶體,也就是使用硬碟了,正常的記憶體不夠用了,需要考慮是否要進行記憶體的擴容。

解決碎片率大的問題

低于4.0版本的Redis

如果你的 Redis 版本是 4.0 以下的,Redis 伺服器重新開機後,Redis 會将沒用的記憶體歸還給作業系統,碎片率會降下來。

高于4.0版本的Redis

Redis 4.0 版本開始,可以在不重新開機的情況下,線上整理記憶體碎片。自動碎片清理,隻要設定了如下的配置,記憶體就會自動清理了:

如果想把 Redis 的配置,寫到配置檔案中去:

config rewrite
           

如果你對自動清理的效果不滿意,可以使用如下指令,直接試下手動碎片清理:

memory purge
           

更多

原文連結:連結

其他:目錄

更多文章,可以關注下方公衆号:

Redis面試題-Redis記憶體碎片Redis記憶體碎片