String類型底層實現的簡單動態字符串sds,是能夠修改的字符串。它採用預分配冗餘空間的方式來減小內存的頻繁分配。java
動態字符串
是以 \0 爲分隔符。最大容量
是redis主動分配的一塊內存空間,實際存儲內容
是具體的存的數據。redis
一、獲取存儲長度不一樣緩存
c語言:
c語言不記錄長度信息,若是要獲取字符串的長度,須要遍歷全部的字符串,才能獲取字符串的長度。獲取長度的複雜度爲 O(n)。
sds(動態字符串):
sds存儲了字符串的長度,獲取長度的複雜度爲 O(1)。安全
二、緩存溢出網絡
c語言:
c語言不記錄長度,在執行strcat函數時,假設分配了內存,存儲的內容比已經分配的內存多時,這個時候就會出現緩衝區溢出現象。
sds(動態字符串):
sds存儲內容時,先檢查內容的存儲是否可以存儲下實際的值,若是不能存儲實際的值,就先擴展緩存區域,再將值存儲到緩衝區域中。函數
三、內存的開闢和釋放學習
c語言:
須要本身主動釋放或者擴展內存,若是不可以主動釋放或者擴展內存,就會出現緩衝溢出或者泄露。
sds(動態字符串):
sds採起下面的方式spa
一、空間預分配
3d// 先進行內存區域進行擴展,而後在執行下面的代碼 public void test(){ if(len < 1M){ //程序分配和len屬性同樣的大小未使用的空間。 }else if(len > 1M){ //程序分配1M 未使用的空間。 } }
二、惰性空間釋放
在修改字符串時,若是實際的內容要比老的數據小,先不將緩衝區的空閒內存釋放掉,等下次存儲內容時再進行空間的釋放或者擴展。code
四、二進制安全
c語言:
C語言必須存儲指定的格式數據。
sds(動態字符串):
SDS不會對數據限制。
-END-
您好,我是一個Java小白,但願和你們一塊兒在技術的道路上一快快樂的學習。但願與您在網絡的世界上會面。