Redis对内存的消耗

Redis's Consumption of Memory

我正在使用redis 来保存jsonwebtokens。我对每条记录的内存消耗有点困惑。

假设我在 Google 云上有一个实例,分配了 4GB 内存,我想知道它可以处理多少条记录。

假设一条记录平均有 1 个字符串值(不包括标识符),并且每个字符串平均有 200 个字符。

这完全取决于您如何存储它们。使用散列(适当调整大小)或普通键值对。 请阅读此文档以获取更多信息 http://redis.io/topics/memory-optimization

对于 200 个字符的 100 万个键(简单键值对),大约需要 300 MB。所以对于 4 GB,我猜你可以存储大约 1400 万个密钥。为了确保这一点,在你的机器上安装 redis,运行 一个简单的 java(使用 jedis)片段,并检查插入前后的内存消耗。

Jedis jedis = new Jedis("localhost");
for i=0 to N    
jedis.set("Key_"+i,string);

Redis 将字符串包装成 sds struct,每个字符串需要 3 个额外字节(或更多)。

每个 sds 都存储在一个 redisObject struct 中(使用指向该 sds 对象的指针)。如果您使用的是 64 位计算机,则需要大约 16 个额外字节。

您也可以考虑散列 table 中的 entries。每个占24个字节。

因此您可以假设每个字符串占用 243 个字节。 100 万个字符串将使用超过 250 MB(Redis 本身需要内存)。