基于此屏幕截图: http://www.dropmocks.com/mBvx1 (死链接)
redis需要两倍于我认为它的内存吗?我相信它会产生另一个保存到磁盘的进程,这是否意味着它实际上复制了内存,我应该总是假设我有16个ram 8演出是单个redis进程的最大值?
答案 0 :(得分:10)
根据您的数据,Redis可以轻松占用8GB。话虽这么说,你所说的“双重记忆”是一个红色的鲱鱼:它会分叉和“复制”内存,但由于写入技术的复制,内存在进程之间共享,只有在两者之一时写入进程对特定的内存字节进行更改。
因此,在保存到磁盘时,只有在保存期间更改的密钥才会在两个进程之间分配额外的内存。其他一切都是共享的。希望这会有所帮助。
答案 1 :(得分:-1)
如果redis有8 GB的内存,它将不会使用超过这个。但是在保存期间,fork()将使新的redis“进程”并将复制所有数据 - 例如多8 GB。由于它无法将其放入内存中,因此它会在交换文件(例如磁盘)上交换它。保存完成后,内存将是免费的。
我在我的服务器上注意到这一点,其中运行了大量sphinx进程,2个redis服务器同时运行4 GB并且保存时间相同。
http://redis4you.com/articles.php?id=006&name=Redis+swap+issue+while+save
答案 2 :(得分:-3)
我不认为Redis应该占用~8GB。您可能希望升级到2.X,因为我认为您可能有内存泄漏。
但是,回到你的问题,我认为Redis确实创建了一个新的进程来保存到磁盘,但Redis存储在内存中。如果电源出现故障,它会保存到磁盘,导致RAM中的所有数据丢失