redis内存优化方法

Posted hrbust_09zhangyabin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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内存两倍多。

 

以上是关于redis内存优化方法的主要内容,如果未能解决你的问题,请参考以下文章

Redis的内存优化

Redis 内存优化在 vivo 的探索与实践

redis的内存优化

redis 如何做内存优化?

Redis内存使用优化与存储

Redis 大数据内存优化 (RoaringBitmap)