Redis 專題一: 資料結構

來源:互聯網
上載者:User

標籤:redis

簡單的動態字串
  • redis沒有直接使用C語言傳統的字串表示,而自己構建了一個動態字串SDS,當redis需要的不僅僅是一個字串字面量,而是一個可以被秀噶ide字串值時,redis就會使用sds來表示字串值,比如在redis的資料庫裡,包含字串值的索引值對在底層都是由SDS實現的。
redis  > set name "bugall"ok1.索引值對的鍵是一個字串對象,對象的底層實現是一個儲存著字串"name"的SDS2.索引值對的值也是一個字串對象,對象的底層實現是一個儲存這字串"bugall"的SDS
  • 除了用來儲存資料庫中的字串值之外,SDS還被用作緩衝區,AOF模組中的AOF緩衝區,以及用戶端狀態中的輸入緩衝區。
struct sdshdr{    //記錄buf數組中已使用位元組的數量    //等於SDS所儲存字串的長度    int len;    //記錄buf數組中未使用位元組的數量    int free;    //位元組數組,用於儲存字串    char buf[];}1. free屬性的值為0,表示這個SDS沒有分配任何未使用空間。2. len屬性的值為5,表示這個SDS儲存了一個五位元組長的字串3. buf屬性是一個char類型數組,數組的前5個位元組分別儲存了‘r‘,‘e‘,‘d‘,‘i‘,‘s‘五個字元,而最後一個位元組則儲存了Null 字元‘\0‘注意:儲存孔子福的1位元組空間不計算在SDS的len屬性裡面,並且為空白字元分配額外的一位元組空間。
  • 與c字串不同,SDS的空間分配策略完全杜絕了發生緩衝區溢位的可能性,當SDS api 需要對SDS進行修改時,API 會先檢查SDS的空間是否滿足修改所需要的要求,如果不滿足的話,API會自動將SDS的空間拓展至執行修改所需要的大小,然後才執行實際的修改操作,所以使用SDS即不需要手動修改SDS的空間大小,也不會出現的緩衝區溢位的情況。

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

Redis 專題一: 資料結構

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.