redis 内存突增缘由

工做中碰见redis内存突增2G,一段时间以后又忽然释放1G,这个时间段内qps正常,没有大数据写入,其余各项正常。html

 

问题缘由,redis内部维护了一个数组字典,存储key指向的内存位置(相似HashMap的容量)。当redis的元素=数组字典的长度时,就会扩容。扩容过程是,首先申请2倍当前长度的空间,而后渐进式hash把旧字典的数据拷贝到新字典去,拷贝完成释放旧字典空间。redis

 

字典存储的是指针,每一个指针占用8个字节,当key的数量达到134217728时(1.3亿),此时134217728*8字节=1GB,就会致使先申请2GB,再释放1GB。数组

 

另外须要注意的是,redis的过时时间也是一个单独的字典维护,当有过时时间的key达到1.3亿时,也有突增2GB的现象。大数据

 

参考文章:指针

http://www.javashuo.com/article/p-vxxdeark-bz.html   渐进式hash说明htm

https://www.cnblogs.com/meituantech/p/9376472.html  比较详细的介绍了rehashblog

 

关键字: redis内存突增  内存突增1GB 内存突增2GB内存

相关文章
相关标签/搜索