![如何计算每 32GB 内存 Redis 中可能的记录数?](https://linux22.com/image/1454785/%E5%A6%82%E4%BD%95%E8%AE%A1%E7%AE%97%E6%AF%8F%2032GB%20%E5%86%85%E5%AD%98%20Redis%20%E4%B8%AD%E5%8F%AF%E8%83%BD%E7%9A%84%E8%AE%B0%E5%BD%95%E6%95%B0%EF%BC%9F.png)
在我的公司,我们正在讨论使用 Redis 而不是 mongodb 构建部分后端的可能性,但我们想计算在 32G 的服务器中能够存储多少条记录。虽然我知道这完全取决于键和值的大小,但如果我们的元素都像这样,有没有办法计算我们能够存储多少个项目:
key: Hexadecimal with 12 bytes.
value: String with 20 bytes.
答案1
假设您为 Redis 分配了 32GB 内存,并且系统资源还提供了其他内存,那么您可以计算出可以存储的条目数。但是,请记住,这是非常笼统的,因为总会存在某种开销。无论如何,如果从数学角度来看条目的纯数量,那么使用 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
正如我之前所说,仅仅假设没有任何开销是非常糟糕的。请参阅下面的 Redis 常见问题解答。如果不了解您的环境的更多细节,就不可能给出更准确的数字。
举几个例子(均使用 64 位实例获得):一个空实例使用 ~ 1MB 内存。100 万个小的 Keys -> String Value 对使用 ~ 100MB 内存。100 万个 Keys -> Hash 值(表示具有 5 个字段的对象)使用 ~ 200 MB 内存。使用 redis-benchmark 实用程序生成随机数据集并使用 INFO memory 命令检查使用的空间,测试您的用例非常简单。64 位系统将比 32 位系统使用多得多的内存来存储相同的键,特别是当键和值都很小时,这是因为指针在 64 位系统中占用 8 个字节。但当然优势在于您可以在 64 位系统中拥有大量内存,因此为了运行大型 Redis 服务器,或多或少需要 64 位系统。另一种选择是分片。