这个页面正在进行中,现在它只是你应该检查的东西的列表,如果你有内存问题。

小聚合数据类型的特殊编码

由于Redis 2.2,许多数据类型都经过了优化,以便在一定的大小下使用更少的空间。Hash,List,由整数组成的Set,和有序Set,当小于给定数量的元素时,并且达到最大的元素大小,以一种非常节省内存的方式进行编码,使用的内存要少10倍(平均节省内存5倍)。

从用户和API的角度来看,这是完全透明的,由于这是CPU/内存的权衡,因此可以使用以下redis.conf指令调优特殊编码类型的最大元素数量和最大元素大小。

hash-max-zipmap-entries 512 (hash-max-ziplist-entries for Redis >= 2.6)
hash-max-zipmap-value 64  (hash-max-ziplist-value for Redis >= 2.6)
list-max-ziplist-entries 512
list-max-ziplist-value 64
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
set-max-intset-entries 512

如果一个特殊编码的值将溢出配置的最大大小,Redis将自动将其转换为普通编码,对于小的值,这个操作非常快,但是如果你更改了设置,以便为更大的聚合类型使用特殊编码的值,那么建议运行一些基准测试来检查转换时间。

使用32位实例

Redis用32位目标编译,每个键使用的内存少得多,由于指针很小,但是这样的实例将被限制为最大内存使用量为4GB。要编译Redis,需要使用32位二进制代码,RDB和AOF文件可以兼容32位和64位实例(当然也可以兼容小的和大的endian),因此你可以从32位切换到64位,或者相反,没有问题。

位和字节级操作

Redis 2.2引入了新的位级和字节级操作,GETRANGESETRANGEGETBITSETBIT。使用这些命令,你可以将Redis字符串类型视为随机访问数组,例如,如果你有一个应用程序,其中用户由唯一的递增整数标识,你可以使用位图来保存关于用户性别的信息,为女性设置位,为男性清理位,或者反过来。对于1亿用户,这个数据在Redis实例中只需要12兆字节的RAM,你可以使用GETRANGESETRANGE进行相同操作,以便为每个用户存储一个字节的信息,这只是一个例子,但是用这些新的基元在非常小的空间中模拟许多问题是可能的。


博弈
2.5k 声望1.5k 粉丝

态度决定一切