【32期】你知道Redis的字符串是怎么實(shí)現(xiàn)的嗎?
閱讀本文大概需要 4 分鐘。
來自:juejin.im/post/5ca9d8ae6fb9a05e5c05c4e8
本人 :常用有5種,string,list,set,zset,hash(內(nèi)心很得意)
本人 :用的最多的是string,通常會把json字符串存進(jìn)去
本人 :呃~,我了解Redis是用C語言寫的,至于具體實(shí)現(xiàn)就不清楚了~
Redis字符串的實(shí)現(xiàn)
Redis字符串的性能優(yōu)勢
Redis字符串的實(shí)現(xiàn)
1.SDS 代碼結(jié)構(gòu)
struct?sdshdr{
????//??記錄已使用長度
????int?len;
????//?記錄空閑未使用的長度
????int?free;
????//?字符數(shù)組
????char[]?buf;
};

2.SDS 動態(tài)擴(kuò)展特點(diǎn)

計(jì)算出大小是否足夠
開辟空間至滿足所需大小
開辟與已使用大小len相同長度的空閑free空間(如果len < 1M)開辟1M長度的空閑free空間(如果len >= 1M)
Redis字符串的性能優(yōu)勢
快速獲取字符串長度
避免緩沖區(qū)溢出
降低空間分配次數(shù)提升內(nèi)存使用效率
1.快速獲取字符串長度
struct?sdshdr{
????//??記錄已使用長度
????int?len;
????//?記錄空閑未使用的長度
????int?free;
????//?字符數(shù)組
????char[]?buf;
};
2.避免緩沖區(qū)溢出

計(jì)算出大小是否足夠
開辟空間至滿足所需大小
3.降低空間分配次數(shù)提升內(nèi)存使用效率
空間與分配
惰性空間回收
推薦閱讀:
【31期】了解什么是 redis 的雪崩、穿透和擊穿?redis 崩潰之后會怎么樣?應(yīng)對措施是什么
【30期】說一下HashMap的實(shí)現(xiàn)原理?
微信掃描二維碼,關(guān)注我的公眾號
朕已閱?
評論
圖片
表情

