Redis内存使用率与备份占用的空间比较

问题描述:

我正在查看Redis备份Web应用程序的rdb文件。有4个这样的文件(对于4个不同的redis服务器同时工作),大小为:13G + 1.6G + 66M + 14M = ~15GRedis内存使用率与备份占用的空间比较

但是,这些相同的4个实例似乎正在使用内存的43.8GB(根据新的文物)。为什么mem和disk之间存在多少空间redis数据之间存在这么大的差异?它可能是一个配置错误,可以帮助解决这个问题吗?

我不认为有任何问题。

首先,数据以压缩格式存储在rdb文件中,以使其大小小于内存中的大小。 rdb文件有多小取决于数据类型,但它可以是redis使用的内存的20-80%左右

您的内存使用量可能超过实际使用量的另一个原因(您可以比较内存从新文件到从redis-cli info memory命令获得的文件)是由于内存碎片。每当redis需要更多的内存时,它将获得从操作系统分配的内存,但不会轻易释放(当密钥过期或被删除时)。这不是一个大问题,因为redis只会在使用额外的内存之后才会要求更多的内存。您还可以使用redis-cli info memory命令检查内存碎片。

+0

有趣的见解。告诉我一件事。什么是检查你的经验的最好方法 - 检查哪些关键模式采用了最多的空间(因此是卫生的候选人)? 'redis-cli --bigkeys'是一种随意的。 –

+1

看看redis-rdb-tools。给定一个rdb,它可以生成包含所有密钥和大小的csv。此后,你可以玩excel。或者你也可以得到一个特定键的大小。使用rdb-tools扫描大型rdb需要一些时间,但完全值得。 – Spock