【134期】面試官:你知道 Redis 內(nèi)部是怎么實現(xiàn)它的字符串的么?
閱讀本文大概需要 4?分鐘。
作者:小小木
cnblogs.com/wyc1994666/p/10669212.html
Redis字符串的實現(xiàn) Redis字符串的性能優(yōu)勢
Redis字符串的實現(xiàn)
1.SDS 代碼結(jié)構(gòu)
struct?sdshdr{
????//??記錄已使用長度
????int?len;
????//?記錄空閑未使用的長度
????int?free;
????//?字符數(shù)組
????char[]?buf;
};

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

計算出大小是否足夠 開辟空間至滿足所需大小 開辟與已使用大小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ū)溢出

計算出大小是否足夠 開辟空間至滿足所需大小 降低空間分配次數(shù)提升內(nèi)存使用效率
空間與分配 惰性空間回收
1. 空間預(yù)分配
當(dāng)修改后的字符串長度len < 1M,則會分配與len相同長度的未使用的空間(free) 當(dāng)修改后的字符串長度len >= 1M,則會分配1M長度的未使用的空間(free)
2. 惰性空間回收
推薦閱讀:
【133期】面試官:你說熟悉MySQL事務(wù),那來談?wù)勈聞?wù)的實現(xiàn)原理吧!
【132期】面試再被問到Spring容器IOC初始化過程,就拿這篇文章砸他~
【130期】面試官:你能說清楚分布式鎖,進(jìn)程鎖,線程鎖的區(qū)別嗎?
微信掃描二維碼,關(guān)注我的公眾號
朕已閱?
評論
圖片
表情

