SDS 簡單動態字串,
SDS的結構:
struct sdshdr{ int len;//記錄BUF陣列中已使用位元組的數量 ,等于SDS所八寸字串的長度 int free;//記錄BUF陣列中未使用位元組的數量 char buf[];//位元組陣列,用于保存字串 }
1、與c語言的字串相比,SDS獲取長度時,時間復雜度位O(1),c的復雜度位O(n),
2、杜絕緩沖區溢位,c字串若未重新分配記憶體,在進行字串拼接時,會導致擴展字串s1的資料溢位到s2所在的空間,導致s2所保存的內容被意外修改(緩沖區溢位),
3、杜絕記憶體泄漏,若裁剪字串,若未重新分配記憶體,則會造成記憶體泄露,
4、對于SDS來說,如果擴展,則SDS API 會檢查空間是否足夠,如果足夠則直接使用未使用的空間,無需重新分配,惰性釋放空間,SDS需要縮短時,程式不會立即重新分配記憶體,而是使用free記錄這些多余的空間,等待將來使用,
5、SDS的API都是使用二進制安全的,所有的SDS API都會以處理二進制的方式處理SDS存放在buf陣列中的資料,程式不會對其中的資料做任何限制、過濾、或者假設,所以Redis不是用陣列保存字串,而是用它來保存一系列的二進制資料,


轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/4602.html
標籤:NoSQL
