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

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

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

【问题讨论】:

    标签: database memory redis ram


    【解决方案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 个字节"跨度>
    猜你喜欢
    • 2011-02-04
    • 2021-07-02
    • 2020-06-27
    • 1970-01-01
    • 2011-11-30
    • 1970-01-01
    • 2011-02-10
    • 2014-05-24
    • 1970-01-01
    相关资源
    最近更新 更多