基于此屏幕截图:http ://www.dropmocks.com/mBvx1 (死链接)
redis 需要两倍于我实际认为的内存吗?我相信它会产生另一个进程来保存到磁盘,这是否意味着它实际上会复制内存,我应该始终假设如果我有 16 gigs 的 ram 8 是单个 redis 进程的最大值?
Redis 可以轻松占用高达 8GB 的空间,具体取决于您的数据。话虽这么说,您所说的“双重内存”是一条红鲱鱼:它确实分叉和“复制”内存,但是由于写入时复制技术,内存在进程之间共享,并且仅在两者之一时写入进程对特定的内存字节进行更改。
因此,在保存到磁盘时,只有在保存期间更改的键才会导致两个进程之间的额外内存分配。其他一切都是共享的。希望这可以帮助。
如果 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
我认为 Redis 不应该占用约 8GB。您可能想要升级到 2.X,因为我认为您可能有内存泄漏。
但是,回到你的问题,我认为 Redis 确实创建了一个新进程来保存到磁盘,但是 Redis 存储在内存中。它保存到磁盘以防电源故障导致 RAM 中的所有数据丢失