【redis內(nèi)存模型】

一、內(nèi)存統(tǒng)計(jì)命令

info memory

該命令會(huì)輸出redis的相關(guān)信息,包括內(nèi)存使用情況,cpu等數(shù)據(jù)

used_memory: redis內(nèi)存分配器分配的內(nèi)存情況,主要是數(shù)據(jù)占用的存儲(chǔ),單位類型是字節(jié),

used_memory-rss: redis進(jìn)程占用操作系統(tǒng)內(nèi)存的大小,

men_fragmentation_ratio : 內(nèi)存碎片比例,數(shù)值越大碎片越多,當(dāng)碎片比較多的話,可以采用重啟的方式(debug reload)使數(shù)據(jù)從排。正常標(biāo)準(zhǔn)是1.03

men_allcocator: 內(nèi)存分配器,默認(rèn)使用的時(shí)jemalloc,該分配器在減少內(nèi)存碎片上處理的比較好

二、內(nèi)存劃分

數(shù)據(jù)

像redis中存儲(chǔ)數(shù)據(jù),通過(guò)對(duì)數(shù)據(jù)進(jìn)行一定的包裝進(jìn)行存儲(chǔ),比如redisobject,sds

redis進(jìn)程占用的內(nèi)存

緩存內(nèi)存

比如復(fù)制積壓緩沖區(qū),客戶端緩沖區(qū),aof緩沖區(qū)

內(nèi)存碎片

當(dāng)清理數(shù)據(jù),但是redis缺無(wú)法釋放數(shù)據(jù)所占有的內(nèi)存,導(dǎo)致該內(nèi)存無(wú)法被redis使用,則就會(huì)出現(xiàn)內(nèi)存碎片

三、數(shù)據(jù)存儲(chǔ)的細(xì)節(jié)

當(dāng)向redis中存儲(chǔ)數(shù)據(jù)的時(shí)候,首先dictEntry對(duì)象會(huì)存儲(chǔ)數(shù)據(jù)的具體存放位置,相當(dāng)于指針。redisobject具體存儲(chǔ)鍵值對(duì),該對(duì)象內(nèi)部存儲(chǔ)數(shù)據(jù)其實(shí)是用sds進(jìn)行存儲(chǔ)。

SDS

sds被稱為動(dòng)態(tài)字符串

struct sdshdr {

????int len;? //已經(jīng)占用的長(zhǎng)度

????int free;? ?//剩余的長(zhǎng)度

????char buf[];??

};

四、優(yōu)化內(nèi)存方法

1.使用jemalloc內(nèi)存分配器

2.使用字符串整型

3.關(guān)注內(nèi)存碎片

內(nèi)存碎片率是一個(gè)重要的參數(shù),對(duì)redis 內(nèi)存的優(yōu)化有重要意義。

如果內(nèi)存碎片率過(guò)高(jemalloc在1.03左右比較正常),說(shuō)明內(nèi)存碎片多,內(nèi)存浪費(fèi)嚴(yán)重;這時(shí)便可以考慮重啟redis服務(wù),在內(nèi)存中對(duì)數(shù)據(jù)進(jìn)行重排,減少內(nèi)存碎片。

如果內(nèi)存碎片率小于1,說(shuō)明redis內(nèi)存不足,部分?jǐn)?shù)據(jù)使用了虛擬內(nèi)存(即swap);由于虛擬內(nèi)存的存取速度比物理內(nèi)存差很多(2-3個(gè)數(shù)量級(jí)),此時(shí)redis的訪問(wèn)速度可能會(huì)變得很慢。因此必須設(shè)法增大物理內(nèi)存(可以增加服務(wù)器節(jié)點(diǎn)數(shù)量,或提高單機(jī)內(nèi)存),或減少redis中的數(shù)據(jù)。

要減少redis中的數(shù)據(jù),除了選用合適的數(shù)據(jù)類型、利用共享對(duì)象等,還有一點(diǎn)是要設(shè)置合理的數(shù)據(jù)回收策略(maxmemory-policy),當(dāng)內(nèi)存達(dá)到一定量后,根據(jù)不同的優(yōu)先級(jí)對(duì)內(nèi)存進(jìn)行回收。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 Redis是目前最火爆的內(nèi)存數(shù)據(jù)庫(kù)之一,通過(guò)在內(nèi)存中讀寫(xiě)數(shù)據(jù),大大提高了讀寫(xiě)速度,可以說(shuō)Redis是實(shí)現(xiàn)網(wǎng)站...
    小陳阿飛閱讀 890評(píng)論 0 1
  • 前言 Redis是目前最火爆的內(nèi)存數(shù)據(jù)庫(kù)之一,通過(guò)在內(nèi)存中讀寫(xiě)數(shù)據(jù),大大提高了讀寫(xiě)速度,可以說(shuō)Redis是實(shí)現(xiàn)網(wǎng)站...
    Java架構(gòu)閱讀 1,336評(píng)論 1 16
  • 回廣州是中秋節(jié)的晚上,萬(wàn)家燈火團(tuán)圓時(shí),我坐在一個(gè)鐵皮怪物里任由它拉著我在漆黑的大地狂奔。 車(chē)窗外夜幕降臨,高懸的圓...
    小銳這個(gè)昵稱竟然被使用了閱讀 695評(píng)論 6 6
  • 看了《類似愛(ài)情》和《錯(cuò)了性別不錯(cuò)愛(ài)》。 演技劇情什么的……我估計(jì)大家也都不是沖著這個(gè)去看的吧(挖鼻孔)??梢詫捜堇?..
    你好我是望也閱讀 645評(píng)論 3 4
  • 關(guān)于過(guò)去:參與項(xiàng)目至關(guān)重要 項(xiàng)目經(jīng)歷和項(xiàng)目中遇到的實(shí)際問(wèn)題 你遇到的印象中最深的bug是什么? 面向?qū)ο?設(shè)計(jì)模式...
    Luxin23閱讀 210評(píng)論 0 1

友情鏈接更多精彩內(nèi)容