【问题标题】:Redis taking up all server memory. What to do?Redis 占用了所有服务器内存。该怎么办?
【发布时间】:2012-01-30 06:25:25
【问题描述】:

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

我尝试过 redis 32bit,但在启动时尝试将数据集加载到内存中失败了。

过去也尝试过 max-memory,但结果很奇怪。自从我读到它已经/将要被弃用后,还没有尝试过虚拟内存。

【问题讨论】:

标签: redis


【解决方案1】:

与cmets中的讨论不同,我认为这个问题可以通过编程来解决,而不是服务器配置

像 redis 这样的系统可以很好地分片。设置好方案后,您可以轻松地对其进行扩展。虽然在客户端代码中设置它确实需要一些工作。

例如...

您可以使用模数/哈希方案将其分片到 4x 实例。

基本上,如果md5sum(key) % 4 == 0,它会转到服务器0;如果md5sum(key) % 4 == 1,则转到服务器1,等等。

您必须在客户端中添加一些逻辑,以确保它访问正确的逻辑。当你得到一条记录时,找出它应该在哪台服务器上,然后查询那个。如果您必须设置记录,请确定它应该在哪个服务器上,然后将其设置在那个服务器上。

这样做的好处是它不会影响你的表现。

【讨论】:

  • 你应该看看consistent hashing。它比基本的模散列有更多的优势。
  • donald,很抱歉评论晚了。如何分片以确保分片后负载均衡?我在redis中维护访问的url,并希望接受分片策略,但我还没有想到找出哪个分片策略好。在您的情况下,4 个实例将如何使用内存,它们具有相同数量的内存或仅使用它们维护的数据量。thx
猜你喜欢
  • 2012-07-20
  • 2016-06-27
  • 2013-02-20
  • 2018-05-15
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 2013-06-05
相关资源
最近更新 更多