工做中碰見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內存