Redis-第九章節-動態字符串

目錄

  • 概述
  • SDS(動態字符串)
  • SDS(動態字符串)與c語言字符串的區別

一、概述

String類型底層實現的簡單動態字符串sds,是能夠修改的字符串。它採用預分配冗餘空間的方式來減小內存的頻繁分配。java

二、SDS動態字符串

動態字符串是以 \0 爲分隔符。最大容量是redis主動分配的一塊內存空間,實際存儲內容是具體的存的數據。redis

三、SDS(動態字符串)與c語言字符串的區別

一、獲取存儲長度不一樣緩存

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小白,但願和你們一塊兒在技術的道路上一快快樂的學習。但願與您在網絡的世界上會面。

相關文章
相關標籤/搜索