目錄
- 概述
- SDS(動態字串)
- SDS(動態字串)與c語言字串的區別
1、概述
String型別底層實作的簡單動態字串sds,是可以修改的字串,它采用預分配冗余空間的方式來減少記憶體的頻繁分配,
2、SDS動態字串

動態字串是以 \0 為分隔符,最大容量是redis主動分配的一塊記憶體空間,實際存盤內容是具體的存的資料,
3、SDS(動態字串)與c語言字串的區別
1、獲取存盤長度不同
c語言:c語言不記錄長度資訊,如果要獲取字串的長度,需要遍歷所有的字串,才能獲取字串的長度,獲取長度的復雜度為 O(n),
sds(動態字串):sds存盤了字串的長度,獲取長度的復雜度為 O(1),
2、快取溢位
c語言:c語言不記錄長度,在執行strcat函式時,假設分配了記憶體,存盤的內容比已經分配的記憶體多時,這個時候就會出現緩沖區溢位現象,
sds(動態字串):sds存盤內容時,先檢查內容的存盤是否能夠存盤下實際的值,如果不能存盤實際的值,就先擴展快取區域,再將值存盤到緩沖區域中,
3、記憶體的開辟和釋放
c語言:需要自己主動釋放或者擴展記憶體,如果不能夠主動釋放或者擴展記憶體,就會出現緩沖溢位或者泄露,
sds(動態字串):sds采取下面的方式
1、空間預分配// 先進行記憶體區域進行擴展,然后在執行下面的代碼 public void test(){ if(len < 1M){ //程式分配和len屬性一樣的大小未使用的空間, }else if(len > 1M){ //程式分配1M 未使用的空間, } }
2、惰性空間釋放
在修改字串時,如果實際的內容要比老的資料小,先不將緩沖區的空閑記憶體釋放掉,等下次存盤內容時再進行空間的釋放或者擴展,
4、二進制安全
c語言:C語言必須存盤指定的格式資料,
sds(動態字串):SDS不會對資料限制,
-END-

您好,我是一個Java小白,希望和大家一起在技術的道路上一快快樂的學習,希望與您在網路的世界上會面,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/261698.html
標籤:NoSQL
