如何计算每 32GB 内存中 Redis 中可能的记录数?

mid*_*dev 4 memory database redis

我的公司正在讨论在 Redis 而不是 mongodb 中构建我们后端的某些部分的可能性,但我们想计算我们将能够在 32G 的服务器中存储多少条记录。虽然我知道这完全取决于键和值的大小,但如果我们的元素都是这样的,有没有办法计算我们能够存储多少个项目:

key: Hexadecimal with 12 bytes.
value: String with 20 bytes.
Run Code Online (Sandbox Code Playgroud)

kob*_*ltz 5

假设您有 32GB 的内存分配给 Redis 和其他内存可用于您的系统资源,您可以计算您可以存储的条目数。但是,请记住,这是非常普遍的,因为总会有某种开销。无论如何,如果您从数学的角度来看纯粹的条目数量,您可以使用 32GB 的 RAM 存储大约 10 亿个条目。

1 GB = 1024MB
1 MB = 1024KB
1 KB = 1024B

1GB = 1,073,741,824B
32GB = 34,359,738,368B

size = 12B + 20B = 32B

number_of_entries = (available_size / size_of_entry)
                  = (34,359,738,368B / 32B)
                  = 1,073,741,824
Run Code Online (Sandbox Code Playgroud)

正如我之前所说,假设没有任何类型的开销是非常糟糕的。请参阅下面的 Redis 常见问题解答。如果不了解环境的更多细节,就不可能提供更准确的数字。

Redis 内存占用是多少?

举几个例子(都是使用 64 位实例获得的):一个空实例使用 ~ 1MB 的内存。100 万个小键 -> 字符串值对使用 ~ 100MB 内存。100 万个键 -> 哈希值,表示具有 5 个字段的对象,使用 ~ 200 MB 内存。使用 redis-benchmark 实用程序生成随机数据集并使用 INFO 内存命令检查使用的空间来测试您的用例是微不足道的。64 位系统将使用比 32 位系统多得多的内存来存储相同的键,特别是如果键和值很小,这是因为指针在 64 位系统中占用 8 个字节。但当然好处是你可以在 64 位系统中拥有大量内存,因此为了运行大型 Redis 服务器,或多或少需要 64 位系统。另一种方法是分片。

  • 我已经开始了一个关于这个主题的系列,我希望在这些天中完成一个 ;) 这是它的价值的第一部分:https://redislabs.com/blog/redis-ram-ramifications-i (2认同)