敗家玩意兒!Redis 竟然浪費(fèi)了這么多內(nèi)存!
作為內(nèi)存數(shù)據(jù)庫(kù),內(nèi)存空間大小對(duì)于 Redis 來(lái)說(shuō)是至關(guān)重要的。內(nèi)存越多,意味著存儲(chǔ)的數(shù)據(jù)也會(huì)越多。但是不知道你有沒(méi)有遇到過(guò)這樣的情況,明明空間很大,但是內(nèi)存的使用卻不是很理想。
為什么會(huì)出現(xiàn)這樣的情況呢?這期我們就來(lái)看看這個(gè)"詭異"的事件。
坐好了,準(zhǔn)備發(fā)車(chē)!

- 思維導(dǎo)圖?-
used_memory:已經(jīng)使用了的內(nèi)存大小。 used_memory_rss:redis 物理內(nèi)存的大小。 mem_fragmentation_ratio:內(nèi)存碎片率。

?
什么是內(nèi)存碎片

內(nèi)存碎片導(dǎo)致的原因



如何解決內(nèi)存碎片

active-defrag-ignore-bytes 100mb: 碎片達(dá)到100MB時(shí),開(kāi)啟清理。 active-defrag-threshold-lower 10: 當(dāng)碎片超過(guò) 10% 時(shí),開(kāi)啟清理。 active-defrag-threshold-upper 100: 內(nèi)存碎片超過(guò) 100%,盡最大清理。
active-defrag-cycle-min 5:
active-defrag-cycle-max 75:
總結(jié)
在命令行執(zhí)行 info memory 即可查看 Redis 內(nèi)存相關(guān)信息。根據(jù)內(nèi)存碎片率可以在一定時(shí)機(jī)內(nèi)進(jìn)行清理碎片清理。
寫(xiě)入數(shù)據(jù)時(shí),Redis 為了減少分配次數(shù)在分配內(nèi)存是根據(jù)固定的大小來(lái)劃分內(nèi)存空間的。修改數(shù)據(jù)時(shí)會(huì)釋放或占用額外的內(nèi)存空間,刪除數(shù)據(jù)時(shí)會(huì)釋放空間。這樣就會(huì)產(chǎn)生不同程度的內(nèi)存碎片。
通過(guò)重啟 Redis 的方式進(jìn)行處理,如果沒(méi)有持久化可能會(huì)導(dǎo)致事故。在持久化情況下,恢復(fù)速度需要取決于文件的大小。 通過(guò)空間置換方式,也就是將已使用的內(nèi)存數(shù)據(jù)重新整理到一起。
有道無(wú)術(shù),術(shù)可成;有術(shù)無(wú)道,止于術(shù)
歡迎大家關(guān)注Java之道公眾號(hào)
好文章,我在看??
評(píng)論
圖片
表情
