redis内存优化方法

先来认识2个redis配置参数

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

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

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

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

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

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

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

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内存两倍多。

原文地址:https://www.cnblogs.com/zhangyabin---acm/p/7500422.html