Redis所有資料都是存放在記憶體中的,所以記憶體的監控及管理對redis來是非常重要的。以下從記憶體監控、管理及優化三個方面來說redis的記憶體。
記憶體監控
redis為我們提供了info memory指令來查看記憶體使用。該指令的展示的數據非常多,以下只看其中比較重要的一些。
used_memory:1146648 (redis分配器分配的記憶體量)
used_memory_human:1.09M(以可讀方式顯示)
used_memory_rss:4358144 (redis總佔用記憶體量)
used_memory_rss_human:4.16M(可讀方式顯示redis總佔用記憶體量)
used_memory_peak:1229448 (userd_memory_peak峰值)
used_memory_peak_human:1.17M
used_memory_overhead:857、257、 backlog等佔用的記憶體)
used_memory_startup:791384(啟動redis消耗的記憶體)
used_memory_dataset:289612(redis資料所佔用的記憶體)
used_memory_lua:37888(lua腳本消耗的記憶體)
記憶體管理
一般建議給redis設定記憶體上限,maxmory修改方式有兩種127.0.0.1:6379> config set maxmemory 1G OK 127.0.0.1:6379> config rewrite OK設定最大記憶體有兩個方面的作用,首先可以限制redis佔用的記憶體大小,防止超過實體記憶體大小。另外,當設定了最大內存後,redis超過了最大內存後,就可以觸發內存回收策略(通常應用於緩存場景)redis可以動態調整最大內存是非常好用的,當伺服器內存不夠用的情況下,需要增加內存,當伺服器內存增大了,再動態調整redis的mammemory。 另外,redis的記憶體回收策略的配置(maxmemory-policy)有幾個,其中有兩個單字常出現,LRU、LFU,意義分別如下:
記憶體最佳化#上面說了redis回收策略,它屬於被動刪除策略,我們可以主動刪除長時間沒有訪問的鍵。可以透過使用scan遍歷鍵,然後使用object ideltime來查看鍵的空閒時間,刪除那些長時間沒有訪問的鍵。
此外,還可以縮減鍵值物件的方式來減少記憶體的佔用量。
127.0.0.1:6379> scan 0 1) "272" 2) 1) "story:course:3915" 2) "story:course:1681" 3) "story:course:4982" ……
例如,上面的鍵可以改為:sy:cos:id來減少鍵的長度。對於,值的話,可以使用壓縮技術來降低值的長度。 (壓縮會增加cpu的壓力,可依具體應用酌情應用)
以上是Redis記憶體監控與管理的詳細內容。更多資訊請關注PHP中文網其他相關文章!