2017-09-23 65 views
0

我正在查看Redis備份Web應用程序的rdb文件。有4個這樣的文件(對於4個不同的redis服務器同時工作),大小爲:13G + 1.6G + 66M + 14M = ~15GRedis內存使用率與備份佔用的空間比較

但是,這些相同的4個實例似乎正在使用內存的43.8GB(根據新的文物)。爲什麼mem和disk之間存在多少空間redis數據之間存在這麼大的差異?它可能是一個配置錯誤,可以幫助解決這個問題嗎?

回答

2

我不認爲有任何問題。

首先,數據以壓縮格式存儲在rdb文件中,以使其大小小於內存中的大小。 rdb文件有多小取決於數據類型,但它可以是redis使用的內存的20-80%左右

您的內存使用量可能超過實際使用量的另一個原因(您可以比較內存從新文件到從redis-cli info memory命令獲得的文件)是由於內存碎片。每當redis需要更多的內存時,它將獲得從操作系統分配的內存,但不會輕易釋放(當密鑰過期或被刪除時)。這不是一個大問題,因爲redis只會在使用額外的內存之後纔會要求更多的內存。您還可以使用redis-cli info memory命令檢查內存碎片。

+0

有趣的見解。告訴我一件事。什麼是檢查你的經驗的最好方法 - 檢查哪些關鍵模式採用了最多的空間(因此是衛生的候選人)? 'redis-cli --bigkeys'是一種隨意的。 –

+1

看看redis-rdb-tools。給定一個rdb,它可以生成包含所有密鑰和大小的csv。此後,你可以玩excel。或者你也可以得到一個特定鍵的大小。使用rdb-tools掃描大型rdb需要一些時間,但完全值得。 – Spock