使用教程(十四):内存优化

1。特殊代码:

因为redis 2.2,许多数据类型可以在一个特殊的编码方式存储空间优化。其中,哈希列表和设置由整数可以用这种方式优化存储结构,为了少占空间,而且在某些情况下,它可以节省9 / 10空间。

这些特殊的代码是Redis的使用完全透明,而事实上,它是CPU与内存之间的事务。如果内存使用率较高,然后使用数据操作数据的CPU是一个点,反之亦然。在Redis,一组配置参数是用来建立特殊编码相关的各种阈值,如:

复制代码代码如下所示:

如果哈希数#场小于参数值,再将使用一种特殊的编码密钥散列值。

哈希最大zipmap条目64

#如果不超过512字节的每个哈希的最大长度,Redis还将使用一种特殊的编码密钥的哈希值。

zipmap哈希最大值512

下面的两个参数#意义基本等同于上述两和散列的相关参数,如列表函数对象类型。

最大ziplist条目列表512

ziplist列表最大值64

#如果在整数集的元素个数小于512,redis将使用特殊的编码。

设置最大intset条目512



如果一个值后已重新编码超过最大极限的配置信息进行修改,然后再将自动转换为正常的编码格式,这个操作是非常快的,但如果操作会反过来,大于正常编码成特殊的编码,提出了使用。在做官方之前最好是简单地测试转换效率,因为这种转换往往效率很低。



二位和字节级操作:

从Redis 2.2,redis提供getrange / / / setbit setrange中的getbit四命令字符串类型的钥匙/最大这些命令,我们可以使用字符串类型的值的数据作为操作数组。例如,唯一的ID标识用户的身份可能是唯一的一个字符串的子字符串,可以很容易地提取的getrange / setrange命令。再次,它可以使用位图来表示用户的性别信息,如1为男性,0为女性。使用这种方式来代表100000000用户的性别信息,它只占用的存储12mb空间。同时,数据遍历setbit /中的getbit命令也是非常有效的。



三。尽可能多地使用散列:

因为小哈希类型数据占用较少的空间,所以我们应该考虑使用哈希类型在实际应用的可能,如用户的注册信息,包括姓名,性别,年龄,电子邮件,密码字段。当然,我们可以将该信息存储在密钥的形式,并且用户填写信息存储在字符串值的形式。然而,Redis更是建议将存储在哈希表,与上述信息是在现场 /值的形式表示。

现在我们可以进一步证明通过redis存储机制的学习。特殊的编码机制已经在这个博客的开头提到的。有两个配置参数的哈希类型有关:哈希最大zipmap条目和hash-max-zipmap-value.as尽他们的行动范围已经给出,这是没有太多多余的。现在让我们假设存储在哈希值的字段数小于哈希最大zipmap条目,和每个元素的长度小于哈希最大zipmap值在同一时间。所以,每当有一个新的键/值存储的哈希类型,Redis会创建哈希值长的空间,并预先分配的最大字节数是:

total_bytes =哈希最大zipmap条目最大zipmap哈希值

因此,保留散列中所有字段的位置,并且可以随意访问字段值,比如访问数组。他们之间的间隔是hash-max-zipmap-value.only在哈希值的字段或一个新的元素的长度的数量超过上述参数,再将它们存储在哈希表的方式。否则,它会一直保持这种高效的方式存储和访问。不仅如此,因为每个密钥存储相关的系统信息,如到期时间,LRU,弦乐与密钥/值类型相比,大大降低了密钥的哈希类型数量(大部分在哈希领域的关键是表达和存储),为了优化存储空间效率。