標籤: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 專題一: 資料結構