Redis:数据库大小与内存的比率?

Posted

技术标签:

【中文标题】Redis:数据库大小与内存的比率?【英文标题】:Redis: Database Size to Memory Ratio? 【发布时间】:2011-06-11 12:56:00 【问题描述】:

Redis 的数据库大小与内存的比例是多少?

例如,如果我有一个 80MB 的数据库,Redis 将使用多少 RAM(与普通 Web 应用程序一起使用时)?

【问题讨论】:

【参考方案1】:

Redis 将使用比磁盘更多的 RAM。转储文件格式可能更密集一些。这是来自真实生产系统的一些数字(在 Ubuntu 10.04 上运行 Redis 2.0.4 的 64 位 EC2 大型实例):

$ redis-cli info | grep used_memory_human
used_memory_human:1.36G

$ du -sh /mnt/data/redis/dump.rdb 
950M /mnt/data/redis/dump.rdb

如您所见,转储文件比内存使用量小几百兆。

最终,这取决于您在数据库中存储的内容。我的主要是散列,只有少数(可能少于 1%)组。没有一个键包含非常大的对象,平均对象大小为 889 字节。

【讨论】:

我在我的机器上做了一些测试,我可以确认这一点; Redis 似乎不包括它用于计入数据库大小限制的 RAM。 我们的四个 redis 实例中的一个有一个 3.4G 的转储文件,但 redis 说它使用了 16.52G 的内存。 如果您使用的是早于 2.4 的 Redis 版本并进行大量删除,则可能会发生这种情况。旧版本的 Redis 从未将内存释放回操作系统,因此内存使用率将保持在高水位线,直到重新启动。 对于我们这些仍在使用 redis 1.2.0 的人,没有 used_memory_human 所以你必须这样做redis-cli info | grep used_memory【参考方案2】:

Redis 数据库存储在内存中,因此 80mb 的数据库将占用 80mb 的内存。

Redis 是一个内存极低的使用程序,你可以从网站上的这个例子中看到“一百万个键,键是从 0 到 999999 的自然数,字符串“Hello World”作为值使用 100MB [拉姆]”。我的 Redis 应用程序使用大约 300kb 到 500kb 的内存,因此您需要大量数据才能访问 80mb 的数据库。 Redis 还会将数据库的快照保存到磁盘,因此 80mb 存储在内存中,80mb 存储在硬盘上。

【讨论】:

-1 这一点都不准确。我有 4.1gb 的数据占用 11gb 的 RAM。 "64 位系统将使用比 32 位系统更多的内存来存储相同的键,特别是如果键和值很小,这是因为指针在 64 位系统中占用 8 个字节"跨度>

以上是关于Redis:数据库大小与内存的比率?的主要内容,如果未能解决你的问题,请参考以下文章

Redis 与 Memcached 的一些区别

Redis系列1—内存管理缓存淘汰策略

Redis应用

面试官:Redis 数据库内存数据满了,会宕机吗?有内存回收?

Redis与KV存储(RocksDB)融合之编码方式

面试官:Redis 内存满了怎么办?