Redis 刪除資料後不能自動釋放記憶體麼?

時間 2021-05-05 22:45:51

1樓:Zola Zhou

這不是Redis本身的問題,Redis本身確實已經呼叫free釋放這些記憶體。這應該是使用的底層C執行時的問題。

就glibc來說,在分配大於128k的記憶體時使用mmap,而使用brk/sbrk在heap中分配小記憶體。通過mmap申請的內存在呼叫free後能馬上返還給系統,而heap中的記憶體就不一定,除非釋放的記憶體是heap中連續的大塊。

Redis本身沒有記憶體管理機制,只有乙個使用量的統計功能 。每次需要建立物件,都是直接呼叫malloc申請,而Redis中的物件基本都比較小,所以基本都是在heap中的記憶體。

可以試試http://

goog-perftools.sourceforge.net/doc/tcmalloc.html

這個記憶體分配實現。

2樓:Gary Chen

這種情況是有可能出現的,頻繁的釋放記憶體,對於資料庫產品的設計不利,你只需要確保這些記憶體仍然可用.這是更高效的辦法.符合生產的使用,也是目前redis採用的.

3樓:張小魚

是你自己使用方式有問題吧.

如果是使用的del命令.是會釋放記憶體的.

db.c

//....

187 void delCommand(redisClient *c)

//....

191 if (dbDelete(c- > db,c- > argv[j])) {

//....

131 int dbDelete(redisDb *db, robj *key) {

//...

140 return dictDelete(db- > dict,key- > ptr) == DICT_OK;

怎麼刪除資料庫?

已登出 跑路1 drop 命令格式 drop database 資料庫名 mysql drop database RUNOOB root host mysqladmin u root p drop RUNOOB Enter password 該函式有兩個引數,在執行成功時返回 TRUE,否則返回 F...

為什麼刪除資料時不用00覆蓋?

熊貓刷牙 這裡包含兩個問題 1 是否要完整覆蓋 2 是否覆蓋的話用00 關於第乙個問題 可以先了解下檔案系統 其次考慮這種情況是不是必需的,而大部分使用場景是想可恢復的。第二個問題,涉及到硬體問題,大部分是以 0xff 替換而不是0x00。 嘮嘮 無意中看到了這題,來答一下。首先,全盤寫0來 刪檔案...

SSD固態硬碟不刪除資料長時間資料會丟失嗎?

悄悄的打槍的不要 會。但是 在你文件消失的時候,大概率系統已經掛掉了。ssd寫資料就是分配電子的過程,讀資料就是測量電壓。時間久了電子流失會導致檔案損壞。 徐尐傑 感覺應該會產生一定影響 我們家有一台舊電腦,系統盤是SSD,家裡平時沒人用電腦 父母都玩手機,不玩電腦,我上學 只有寒暑假我回來才會開電...