日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Redis笔记之基本数据结构 动态字符串SDS

發布時間:2025/3/11 数据库 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Redis笔记之基本数据结构 动态字符串SDS 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡單動態字符串

傳統上的C語言的字符串表示是以空字符結尾的字符數組(C字符串),redis自己實現一個動態字符串(SDS),兩者之間的區別以及使用SDS的好處有:

  • 結構不同。C字符串以空字符結尾的字符數組,而SDS表現的更為復雜,使用一個結構體來表示一個SDS,如圖所示。其中,free屬性表示buffer字符數組中剩余的空間,len表示已經使用的空間。另外,SDS遵守C字符串的慣例,以空字符結尾,這樣就可以復用一些C字符串的API,例如打印函數等。
  • 常數級別的讀取字符串長度。C字符串每次讀取length都需要遍歷一次buffer數組,而SDS通過返回len屬性直接得到長度。
  • 防止數據溢出。C字符串在創建時需要分配一定的空間,如果兩個字符串s1,s2在內存空間緊密相連,這時對字符串s1后面添加一個字符串,而又忘記為s1重新分配足夠的空間,那么s1數據將溢出到s2的空間上;而SDS通過判斷free屬性來判斷當前空余空間是否充足來保證正確的字符串增加等。
  • 采用預空間分配和惰性空間釋放減少修改字符串帶來的內存重分配次數預空間分配:當對SDS修改并且free空間不足,需要進行擴展,在補充不足空間的同時也會增加free的值;如果buffer的長度小于1M,那么擴展后的buffer長度等于len+free+1byte,free=len;如果buffer長度大于等于1M,那么擴展后的buffer長度等于len+1M+1byte。惰性空間釋放:當執行字符串縮減時,不用釋放空間,直接將需要釋放的空間納入到free中,減少內存釋放以及重分配的次數。
  • 二進制安全。C字符串只能保存文本數據,不能保存音頻,圖像,壓縮文件等二進制文件(因為C字符串以\0結束),而SDS可以,因為SDS不是利用空字符來判斷字符串結束,而是通過len屬性來判斷。

另外,SDS也兼容了C字符串的一些API(因為在buffer數組使用C字符串的慣例以空字符結尾),這樣的好處就是redis不用自己在重新實現,可以復用一部分C字符串的API。

本文為《Redis設計與實現》閱讀筆記

總結

以上是生活随笔為你收集整理的Redis笔记之基本数据结构 动态字符串SDS的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。