redis内存优化方法

先来认识2个redis配置参数redis

hash-max-ziplist-entries : hash内部编码压缩列表的最大值,默认512数组

hash-max-zipmap-value : hash内部编码压缩列表单个key的最大值,默认64字节。服务器

这是hash的配置,list,set,zset也有相似的配置参数。优化

 

 

先说结论:总结redis节约内存的方法。编码

 

1,使用对象共享池优化小整数对象。spa

2,数据优先使用整数,比字符串更节省空间。对象

3,操做优化。尽可能避免字符串的追加操做,由于字符串存在预分配机制。追加操做后字符串对象会分配一倍的容量做为于预留空间。ip

4,编码优化。list,hash,set,zset尽量使用ziplist编码。好处是内存降低,坏处是操做变慢。通常大小不超过1000。内存

5,控制键的数量,100万idfa映射到1000个hash中,每一个hash保存1000个元素。由于一样的数据使用ziplist编码比存储string类型节约空间。字符串

 

缘由:

1,ziplist的内部表现是尽愁排列的一块连续内存数组。hashtable不是,占内存更多。

2,一样的数据使用ziplist编码的hash存储比string类型节约内存。

 

 

实验验证================

 

服务器redis参数配置:

hash-max-ziplist-entries 512

hash-max-ziplist-value 64

 

=============================

验证一:验证hastable和ziplist编码的内存差别。

1,200个hash,每一个500个field,value

fied  value

000001 124F9D54-D107-4F7D-ABAF-E37DB7F1712E

操做前redis大小:

used_memory:1839072

used_memory_human:1.75M

 

写入200个ziplist编码的hash操做后。

used_memory:6772320

used_memory_human:6.46M

内存大小:4.71M

 

2,100000个idfa用hashtable编码存成1个hash。

操做后

used_memory:21137248

used_memory_human:20.16M

内存大小13.7M

 

结论:编码优化能够显著下降内存。使用hashtable占内存是ziplist的三倍。

 

===========================

验证2,控制键的个数来下降内存。

10万个idfa存成string格式。

# Memory

used_memory:33383776

used_memory_human:31.84M

内存大小11.68M

结论:相同数量的string是ziplist编码的hash内存两倍多。

相关文章
相关标签/搜索