redis 各种类型内存优化

1、关闭vm选项,即vm-enabled 为 no;
2、Redis Hash是value内部为一个HashMap,如果该Map的成员数比较少,则会采用类似一维线性的紧凑格式来存储该Map, 即省去了大量指针的内存开销,配置如下:
hash-max-zipmap-entries 1024   成员数量大于将会采用hashmap形式 解决方法是分段
hash-max-zipmap-value 512 :key的字节大于512字节将会转成hashmap 解决方法是md5加密
HashMap的优势就是查找和操作的时间复杂度都是O(1)的,而放弃Hash采用一维存储则是O(n)的时间复杂度

list-max-ziplist-entries 512
list数据类型多少节点以下会采用去指针的紧凑存储格式。
list-max-ziplist-value 64 
list数据类型节点值大小小于多少字节会采用紧凑存储格式。
set-max-intset-entries 512 
set数据类型内部数据如果全部是数值型,且包含多少节点以下会采用紧凑格式存储。

3、Redis内部实现没有对内存分配方面做过多的优化,在一定程度上会存在内存碎片,不过大多数情况下这个不会成为Redis的性能瓶颈,不过如果在Redis内部存储的大部分数据是数值型的话,Redis内部采用了一个shared integer的方式来省去分配内存的开销,即在系统启动时先分配一个从1~n 那么多个数值对象放在一个池子中,如果存储的数据恰好是这个数值范围内的数据,则直接从池子里取出该对象,并且通过引用计数的方式来共享,这样在系统存储了大量数值下,也能一定程度上节省内存并且提高性能,这个参数值n的设置需要修改源代码中的一行宏定义REDIS_SHARED_INTEGERS,该值默认是10000,可以根据自己的需要进行修改,修改后重新编译就可以了。

原文地址:https://www.cnblogs.com/xiongwei89/p/3604711.html