2010-10-03 72 views

回答

-3

我不認爲Redis應該佔用〜8GB。你可能想升級到2.X,因爲我認爲你可能有內存泄漏。

但是,回到你的問題,我認爲Redis確實創建了一個新的進程來保存到磁盤,但Redis存儲在內存中。它可以保存到磁盤以防止電源故障導致RAM中的所有數據丟失

10

根據您的數據,Redis可能會輕鬆佔用8GB的空間。也就是說,你所說的「雙重記憶」是一個紅鯡魚:它叉叉和「複製」內存,但由於在寫入技術上覆制,內存在進程之間共享,並且只在兩個中的一個進程對內存的特定字節進行更改。

因此,在保存到磁盤時,只有在保存期間更改的密鑰纔會導致兩個進程之間的額外內存分配。其他一切都是共享的。希望這可以幫助。

+0

我想這隻適用於* nix平臺? 我猜想在Windows上運行Redis可能會導致內存的雙重使用情況? – 2017-04-30 19:08:44

-1

如果redis有8 GB的內存,它不會使用超過這個。然而,在保存期間,fork()會使新的redis「進程」並將複製所有數據 - 例如8 GB以上。由於它不能適應內存,它會將其交換到交換文件(例如磁盤)上。一旦保存完成,內存將是免費的。

我注意到在我的服務器上有很多獅身人面像進程在運行,2個redis服務器都在4 GB和保存狀態下工作,發生在同一時間。

http://redis4you.com/articles.php?id=006&name=Redis+swap+issue+while+save

+1

當進行後臺保存時,它並不是逐字節地拷貝進程內存映像。請參閱:http://redis.io/topics/faq「Redis後臺保存模式依賴於現代操作系統中fork的copy-on-write語義......」 – Kevin 2012-04-16 22:51:52