首頁 >資料庫 >Redis >Redis記憶體監控與管理

Redis記憶體監控與管理

齐天大圣
齐天大圣原創
2020-05-25 14:10:321859瀏覽

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腳本消耗的記憶體)

  • ##used_memory_lua_human:37.00K(可讀方式展現)

  • mem_fragmentation_ratio:4.02(記憶體碎片率,used_memory_rss / used_memory)

mem_fragmentation_ratio大於1時,表示有記憶體碎片,數值越低表示碎片率。應用允許的情況下,可以重啟redis來降低碎片率。小於0時,就要非常注意了,表示記憶體不夠用了,使用了部分swap。

記憶體管理

一般建議給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,意義分別如下:

    ##最近最少使用的(Least Recently Used)
  • 最近最不常用的(Least Frequently Used)
  • 下面來看看所有的回收策略及意義:

    noeviction:預設策略,不會刪除任何鍵,當超過最大記憶體後,拒絕任何寫入指令,只回應讀取指令
  • volatile-lru:根據lru演算法刪除過期的鍵,如果沒有可刪除的鍵,則回退到noeviction策略。
  • allkeys-lru:根據lru演算法刪除鍵,不管鍵是否過期,直到佔用記憶體小於maxmeory為止。
  • allkeys-lfu:和上面意義一致,只不過是使用lfu演算法來刪除。
  • allkeys-random:當達到最大記憶體後,隨機刪除鍵。
  • volatile-ttl:刪除快要過期的鍵。如果沒有則回退到noeviction。

記憶體最佳化#上面說了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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:Redis主從複製下一篇:Redis主從複製