溫馨提示×

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

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

Redis進(jìn)程內(nèi)消耗的是什么

發(fā)布時(shí)間:2020-11-19 14:06:59 來(lái)源:億速云 閱讀:152 作者:小新 欄目:關(guān)系型數(shù)據(jù)庫(kù)

這篇文章給大家分享的是有關(guān)Redis進(jìn)程內(nèi)消耗的是什么的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧。

Redis進(jìn)程內(nèi)消耗主要包括:自身內(nèi)存+對(duì)象內(nèi)存+緩沖內(nèi)存+內(nèi)存碎片。

內(nèi)存。因?yàn)閞edis的數(shù)據(jù)都是存儲(chǔ)在內(nèi)存當(dāng)中。內(nèi)存數(shù)據(jù)庫(kù)相比一般的關(guān)系型數(shù)據(jù)庫(kù),讀取速度要更快,但是消耗的內(nèi)存資源會(huì)更多。

對(duì)象內(nèi)存

對(duì)象內(nèi)存是Redis內(nèi)存占用最大的一塊,存儲(chǔ)著用戶所有的數(shù)據(jù)。Redis所有數(shù)據(jù)都采用key-value數(shù)據(jù)類型,每次創(chuàng)建鍵值對(duì)時(shí),至少創(chuàng)建兩個(gè)類型對(duì)象:key對(duì)象和value對(duì)象。內(nèi)存消耗可以簡(jiǎn)單的理解為sizeof(keys)+sizeof(values)。鍵對(duì)象都是字符串,在使用Redis時(shí)很容易忽略鍵對(duì)內(nèi)存消耗的影響,應(yīng)當(dāng)避免使用過(guò)長(zhǎng)的鍵。value對(duì)象更復(fù)雜些,主要包括5種基本數(shù)據(jù)類型:字符串、列表、哈希、集合、有序集合。每種value對(duì)象類型根據(jù)使用規(guī)模不同,占用內(nèi)存不同。在使用時(shí)一定要合理預(yù)估并監(jiān)控value對(duì)象占用情況,避免內(nèi)存溢出。

緩沖內(nèi)存

緩沖內(nèi)存主要包括:客戶端緩沖、復(fù)制積壓緩沖區(qū)、AOF緩沖區(qū)。

客戶端緩沖指的是所有接入到Redis服務(wù)器TCP連接的輸入輸出緩沖。輸入輸出緩沖無(wú)法控制,最大空間為1G,如果超過(guò)將斷開(kāi)連接。輸入緩沖通過(guò)參數(shù)client-output-buffer-limit控制:

1.普通客戶端:除了復(fù)制和訂閱的客戶端之外的所有連接,Redis的默認(rèn)配置是:client-output-buffer-limit normal 0 0 0,Redis并沒(méi)有對(duì)普通客戶端的輸出緩沖區(qū)做限制,一般普通客戶端的內(nèi)存消耗可以忽略不計(jì),但是當(dāng)有大量慢連接客戶端接入時(shí)這部分內(nèi)存消耗就不能忽略了,可以設(shè)置maxclients做限制。注意不要只用大量數(shù)據(jù)輸出的命令且數(shù)據(jù)無(wú)法及時(shí)推送給客戶端,如 monitor命令,容易造成Redis服務(wù)器內(nèi)存突然飆升。

從客戶端:主節(jié)點(diǎn)會(huì)為每個(gè)從節(jié)點(diǎn)單獨(dú)建立一條連接用于命令復(fù)制,默認(rèn)配置是:client-output-buffer-limit slave 256mb 64mb 60。當(dāng)主從節(jié)點(diǎn)之間網(wǎng)絡(luò)延遲較高或主節(jié)點(diǎn)掛載大量從節(jié)點(diǎn)時(shí)這部分內(nèi)存消耗將占用很大一部分,建議主節(jié)點(diǎn)掛載的從節(jié)點(diǎn)不要多于2個(gè),主從節(jié)點(diǎn)不要部署在較差的網(wǎng)絡(luò)環(huán)境下,如異地跨機(jī)房,防止復(fù)制客戶端連接緩慢造成溢出。

訂閱客戶端:當(dāng)使用發(fā)布訂閱功能時(shí),連接客戶端使用單獨(dú)的輸出緩沖區(qū),默認(rèn)配置為:client-output-buffer-limit pubsub 32mb 8mb 60,當(dāng)訂閱服務(wù)的消息生產(chǎn)快于消費(fèi)速度時(shí),輸出緩沖區(qū)會(huì)產(chǎn)生積壓造成輸出緩沖區(qū)空間溢出。

復(fù)制積壓緩沖區(qū):Redis在2.8版本之后提供了一個(gè)可重用的固定大小緩沖區(qū)用于實(shí)現(xiàn)部分復(fù)制功能,根據(jù)repl-backlog-size參數(shù)控制,默認(rèn)為1MB。對(duì)于復(fù)制積壓緩沖區(qū)整個(gè)主節(jié)點(diǎn)只有一個(gè),所有從節(jié)點(diǎn)共享此緩沖區(qū),因此可以設(shè)置較大的緩沖區(qū)空間,如100MB。

AOF緩沖區(qū):這部分空間用于在Redis重寫(xiě)期間保存最近的寫(xiě)入命令。

3.內(nèi)存碎片

Redis默認(rèn)的內(nèi)存分配器采用jemalloc,可選的分配器還有:glibc、tcmalloc。內(nèi)存分配器為了更好地管理和重復(fù)利用內(nèi)存,分配內(nèi)存策略一般采用固定范圍的內(nèi)存塊進(jìn)行分配。

以下場(chǎng)景容易出現(xiàn)高內(nèi)存碎片問(wèn)題:

頻繁做更新操作,例如頻繁對(duì)已存在的鍵執(zhí)行append、setrange等更新操作。

大量過(guò)期鍵刪除,鍵對(duì)象過(guò)期刪除后,釋放的空間無(wú)法得到充分利用,導(dǎo)致碎片率上升。

感謝各位的閱讀!關(guān)于Redis進(jìn)程內(nèi)消耗的是什么就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

向AI問(wèn)一下細(xì)節(jié)

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

AI