Redis 占用了所有服务器内存。该怎么办?

Redis 占用了所有服务器内存。该怎么办?

我有一台运行 2.4.5 版的 Redis 服务器,内存中加载了 11GB 的 dump.rdb。它在 EC2 的高内存 4 倍超大实例(总内存 70GB)上运行。然而,事实证明 Redis 已经占用了 50GB 内存,而且还在不断增加。我的数据集还会越来越大,可能达到 20GB 左右,所以显然 70GB 内存是不够的。你们有什么想法可以克服这个限制或让 Redis 消耗更少的内存吗?

我已经尝试过 32 位 redis,但是它在启动时尝试将数据集加载到内存中时就死机了。

过去也尝试过最大内存,但结果很奇怪。自从我读到虚拟内存即将被弃用后,我就没再尝试过它。

答案1

购买另一台服务器,进行分片。这就是 Redis 的工作方式。如果这不是您想要的,那么 Redis 就不适合您。

答案2

如果您有足够的交换空间,您可以让它耗尽内存。性能会受到影响。如果您不想将整个数据集保存在 RAM 中,那么它redis就不适合这项工作。

查看Redis 常见问题解答

您可以尝试在 Redis 中加载大于内存的数据集,然后观察会发生什么情况。基本上,如果您使用的是现代操作系统,并且数据库中有大量很少访问的数据,则操作系统的虚拟内存实现将尝试在磁盘上交换很少使用的内存页面,仅在需要时调用这些页面。如果您有许多很少使用的大值,这种方法将有效。如果您的数据库很大,因为您有大量随机访问的小值,而没有特定的模式,这种方法将不起作用(在低级别,一个页面通常为 4096 字节,并且您可以在一个页面上存储不同的键/值。即使只有很少的键经常使用,操作系统也无法在磁盘上交换此页面)。

相关内容