記憶。 因?yàn)閞edis數(shù)據(jù)是保存在內(nèi)存中的。 與一般關(guān)系型數(shù)據(jù)庫(kù)相比,內(nèi)存數(shù)據(jù)庫(kù)的讀取速度更快,但消耗的內(nèi)存資源也更多。
對(duì)象內(nèi)存(推薦學(xué)習(xí):Redis視頻教程)
對(duì)象內(nèi)存是Redis內(nèi)存中最大的一塊,存儲(chǔ)所有用戶數(shù)據(jù)。 Redis中的所有數(shù)據(jù)都采用key-value數(shù)據(jù)類(lèi)型。 每次創(chuàng)建鍵值對(duì)時(shí),至少會(huì)創(chuàng)建兩種類(lèi)型對(duì)象:鍵對(duì)象和值對(duì)象。 內(nèi)存消耗可以簡(jiǎn)單理解為(keys)+()。 關(guān)鍵對(duì)象都是字符串。 使用Redis時(shí),很容易忽略key對(duì)內(nèi)存消耗的影響。 您應(yīng)該避免使用太長(zhǎng)的鍵。 值對(duì)象比較復(fù)雜,主要包括5種基本數(shù)據(jù)類(lèi)型:字符串、列表、哈希、集合、有序集合。 每個(gè)值對(duì)象類(lèi)型根據(jù)使用規(guī)模占用不同的內(nèi)存。 使用時(shí)必須合理估計(jì)和監(jiān)控值對(duì)象占用情況,避免內(nèi)存溢出。
緩沖存儲(chǔ)器
緩沖存儲(chǔ)器主要包括:客戶端緩沖區(qū)、復(fù)制積壓緩沖區(qū)、AOF緩沖區(qū)。
客戶端緩沖是指與Redis服務(wù)器的所有TCP連接的輸入和輸出緩沖。 輸入和輸出緩沖區(qū)無(wú)法控制。 最大空間為1G。 如果超過(guò),連接將被斷開(kāi)。 輸入緩沖由參數(shù) ---limit 控制:
1、普通客戶端:對(duì)于除復(fù)制和訂閱客戶端之外的所有連接rddis主要消耗什么物理資源,Redis的默認(rèn)配置為: ---limit 0 0 0。Redis不限制普通客戶端的輸出緩沖區(qū)。 一般情況下,普通客戶端的輸出緩沖區(qū)內(nèi)存消耗可以忽略不計(jì),但是當(dāng)連接大量慢速連接客戶端時(shí),這部分內(nèi)存消耗就不能忽略了,可以設(shè)置限制。 注意不要只使用輸出大量數(shù)據(jù)的命令,導(dǎo)致數(shù)據(jù)無(wú)法及時(shí)推送到客戶端。 此類(lèi)命令很容易導(dǎo)致Redis服務(wù)器的內(nèi)存突然激增。
從客戶端:主節(jié)點(diǎn)會(huì)為每個(gè)從節(jié)點(diǎn)建立單獨(dú)的連接,用于命令復(fù)制。 默認(rèn)配置為: ---limit Slave 256mb 64mb 60。當(dāng)主從節(jié)點(diǎn)之間的網(wǎng)絡(luò)延遲較高或者主節(jié)點(diǎn)掛載大量從節(jié)點(diǎn)時(shí),這部分內(nèi)存消耗會(huì)占據(jù)很大一部分。 建議主節(jié)點(diǎn)掛載不超過(guò)2個(gè)從節(jié)點(diǎn),并且主從節(jié)點(diǎn)不要部署在較差的位置。 在一定的網(wǎng)絡(luò)環(huán)境下,比如跨不同機(jī)房,防止復(fù)制客戶端連接速度慢導(dǎo)致溢出。
訂閱客戶端:使用發(fā)布訂閱功能時(shí),連接客戶端使用單獨(dú)的輸出緩沖區(qū)。 默認(rèn)配置為: ---limit 32mb 8mb 60。當(dāng)訂閱服務(wù)的消息生產(chǎn)速度快于消費(fèi)速度時(shí),就會(huì)產(chǎn)生輸出緩沖區(qū)。 積壓導(dǎo)致輸出緩沖區(qū)空間溢出。
復(fù)制積壓緩沖區(qū):Redis在2.8版本之后提供了可重用的固定大小緩沖區(qū)來(lái)實(shí)現(xiàn)一些復(fù)制功能。 根據(jù)repl--size參數(shù)控制,默認(rèn)為1MB。 整個(gè)主節(jié)點(diǎn)只有一個(gè)復(fù)制積壓緩沖區(qū),所有從節(jié)點(diǎn)共享這個(gè)緩沖區(qū),因此可以設(shè)置較大的緩沖區(qū)空間,比如100MB。
AOF緩沖區(qū):這部分空間用于保存Redis重寫(xiě)時(shí)最近的寫(xiě)入命令。
3、內(nèi)存碎片
Redis 使用默認(rèn)的內(nèi)存分配器。 可選分配器包括:glibc。 為了更好的管理和復(fù)用內(nèi)存,內(nèi)存分配器一般使用固定范圍的內(nèi)存塊來(lái)分配內(nèi)存。
以下場(chǎng)景容易出現(xiàn)內(nèi)存碎片高的問(wèn)題:
頻繁執(zhí)行更新操作rddis主要消耗什么物理資源,例如對(duì)現(xiàn)有的key頻繁執(zhí)行更新操作等。
大量過(guò)期密鑰被刪除。 關(guān)鍵對(duì)象過(guò)期刪除后,釋放的空間無(wú)法充分利用,導(dǎo)致碎片率增加。