溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Redis的內(nèi)存監(jiān)控、管理、優(yōu)化

發(fā)布時間:2020-05-25 15:47:39 來源:億速云 閱讀:244 作者:鴿子 欄目:關(guān)系型數(shù)據(jù)庫

Redis所有數(shù)據(jù)都是存放在內(nèi)存中的,所以內(nèi)存的監(jiān)控及管理對redis來是是非常重要的。下面從內(nèi)存監(jiān)控、管理及優(yōu)化三個方面來說說redis的內(nèi)存。

內(nèi)存監(jiān)控

redis為我們提供了info memory命令來查看內(nèi)存使用。該命令的展示的數(shù)據(jù)非常多,下面只看其中比較重要的一些。

  • used_memory:1146648 (redis分配器分配的內(nèi)存量)

  • used_memory_human:1.09M(以可讀方式展示)

  • used_memory_rss:4358144 (redis總占用內(nèi)存量)

  • used_memory_rss_human:4.16M(可讀方式展示redis總占用內(nèi)存量)

  • used_memory_peak:1229448 (userd_memory_peak峰值)

  • used_memory_peak_human:1.17M

  • used_memory_overhead:857036(緩沖區(qū)、backlog等占用的內(nèi)存)

  • used_memory_startup:791384(啟動redis消耗的內(nèi)存)

  • used_memory_dataset:289612(redis數(shù)據(jù)所占用的內(nèi)存)

  • used_memory_lua:37888(lua腳本消耗的內(nèi)存)

  • used_memory_lua_human:37.00K(可讀方式展現(xiàn))

  • mem_fragmentation_ratio:4.02(內(nèi)存碎片率,used_memory_rss / used_memory)

mem_fragmentation_ratio大于1時,表示有內(nèi)存碎片,數(shù)值越低表示碎片率越嚴重。應用允許的情況下,可以重啟redis來降低碎片率。當小于0時,就要非常注意了,表示內(nèi)存不夠用了,使用了部分swap。

內(nèi)存管理

一般建議給redis設(shè)置內(nèi)存上限,maxmory

修改方式有兩種

  • 修改配置文件

  • 動態(tài)設(shè)置

下面展示動態(tài)設(shè)置

127.0.0.1:6379> config set maxmemory 1G
OK
127.0.0.1:6379> config rewrite
OK

設(shè)置最大內(nèi)存有兩個方面的作用,首先可以限制redis占用的內(nèi)存大小,防止超過物理內(nèi)存大小。另外,當設(shè)置了最大內(nèi)存后,redis超過了最大內(nèi)存后,就可以觸發(fā)內(nèi)存回收策略(通常應用于緩存場景)

redis可以動態(tài)調(diào)整最大內(nèi)存是非常好用的,當服務(wù)器內(nèi)存不夠用的情況下,需要增加內(nèi)存,當服務(wù)器內(nèi)存增大了,再動態(tài)調(diào)整redis的mammemory。

另外,redis的內(nèi)存回收策略的配置(maxmemory-policy)有幾個,其中有兩個單詞經(jīng)常出現(xiàn),LRU、LFU,意義分別如下:

  • 最近最少使用的(Least Recently Used)

  • 最近最不常用的(Least Frequently Used)

下面來看看所有的回收策略及意義:

  • noeviction:默認策略,不會刪除任何鍵,當超過最大內(nèi)存后,拒絕任何寫入命令,只響應讀命令

  • volatile-lru:根據(jù)lru算法刪除過期的鍵,如果沒有可刪除的鍵,則回退到noeviction策略。

  • allkeys-lru:根據(jù)lru算法刪除鍵,不管鍵是否過期,直到占用內(nèi)存小于maxmeory為止。

  • allkeys-lfu:和上面含義一致,只不過是使用lfu算法來刪除。

  • allkeys-random:當達到最大內(nèi)存后,隨機刪除鍵。

  • volatile-ttl:刪除快要過期的鍵。如果沒有則回退到noeviction。

內(nèi)存優(yōu)化

上面說了redis回收策略,它屬于被動刪除策略,我們可以主動去刪除長時間沒有訪問的鍵。可以通過使用scan遍歷鍵,然后使用object ideltime來查看鍵的空閑時間,刪除那些長時間沒有訪問的鍵。

此外,還可以縮減鍵值對象的方式來減低內(nèi)存的占用量。

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來減低鍵的長度。對于,值的話,可以使用壓縮技術(shù)來降低值的長度。(壓縮會增加cpu的壓力,可根據(jù)具體應用酌情應用)

以上就是Redis內(nèi)存監(jiān)控及管理的詳細內(nèi)容,更多請關(guān)注億速云其它相關(guān)文章!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI