2010-10-03 44 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