愚公系列2022年05月 .NET架構班 046-分布式中間件 Redis存儲原理之string

      網友投稿 739 2022-05-29

      前言

      1.SDS概念

      Redis中字符串的實現,Simple Dynamic String簡單動態字符串,是一數據結構。

      Redis是用C語言實現的,但C語言本身沒有字符串類型(只能用字符數組 char[]實現)。所以就會有以下問題:

      使用字符數組必須先給目標變量分配足夠的空間,否則可能會溢出。

      如果要獲取字符長度,必須遍歷字符數組,時間復雜度是 O(n)。

      C 字符串長度的變更會對字符數組做內存重分配。

      通過從字符串開始到結尾碰到的第一個’

      通過從字符串開始到結尾碰到的第一個’\0’來標記字符串的結束,因此不能保 存圖片、音頻、視頻、壓縮文件等二進制(bytes)保存的內容,二進制不安全。

      ’來標記字符串的結束,因此不能保 存圖片、音頻、視頻、壓縮文件等二進制(bytes)保存的內容,二進制不安全。

      而SDS的特點:

      不用擔心內存溢出問題,如果需要會對SDS進行擴容。

      【愚公系列】2022年05月 .NET架構班 046-分布式中間件 Redis存儲原理之string

      獲取字符串長度時間復雜度為 O(1),因為定義了len屬性。

      通過“空間預分配”( sdsMakeRoomFor)和“惰性空間釋放”,防止多次重分配內存。

      判斷是否結束的標志是 len 屬性(它同樣以’\0’結尾是因為這樣就可以使用 C語言中函數庫操作字符串的函數了),可以包含’\0’。

      一、Redis存儲原理之string

      1. string結構

      redisObject 結構如下:

      typedef struct redisObject { unsigned type:4; /* 對象的類型,包括:OBJ_STRING、OBJ_LIST、OBJ_HASH、OBJ_SET、OBJ_ZSET */ unsigned encoding:4; /* 具體的數據結構 */ unsigned lru:LRU_BITS; /* 24 位,對象最后一次被命令程序訪問的時間,與內存回收有關 */ int refcount; /* 引用計數。當 refcount 為 0 的時候,表示該對象已經不被任何對象引用,則可以進行垃圾回收了 */ void *ptr; /* 指向對象實際的數據結構 */ } robj;

      SDS結構如下:

      /* sds.h */ struct __attribute__ ((__packed__)) sdshdr8 { uint8_t len; /* 當前字符數組的長度 */ uint8_t alloc; /*當前字符數組總共分配的內存大小 */ unsigned char flags; /* 當前字符數組的屬性、用來標識到底是 sdshdr8 還是 sdshdr16 等 */ char buf[]; /* 字符串真正的值 */ };

      2.string編碼類型

      字符串的編碼有三種:

      int:存儲 8 個字節的長整型(long,2^63-1)。大小超過了 long 的范圍 (2^63-1=9223372036854775807)時會自動轉成embstr。

      embstr:代表 embstr 格式的 SDS(Simple Dynamic String 簡單動態字符串), 存儲小于 44 個字節的字符串。分配一次內存空間,而且是只讀的。

      raw:存儲大于 44 個字節的字符串(3.2 版本之前是 39 字節)。分配二次內存空間。

      3.應用場景

      Redis 分布式

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:Python編程:flask-cors模塊解決Flask跨域請求Cross-Origin問題
      下一篇:FairMot算法重點突破
      相關文章
      亚洲AV无码乱码在线观看裸奔| 亚洲啪啪AV无码片| 中文字幕亚洲激情| 午夜亚洲乱码伦小说区69堂| 亚洲aⅴ天堂av天堂无码麻豆| 亚洲成a人片在线看| 亚洲国产日韩女人aaaaaa毛片在线| 亚洲A∨无码一区二区三区| 日韩亚洲欧洲在线com91tv| 亚洲精品亚洲人成人网| 亚洲尤码不卡AV麻豆| 一本色道久久综合亚洲精品高清| 亚洲男人的天堂一区二区| 无码专区一va亚洲v专区在线| 国产精品亚洲一区二区三区久久| 亚洲AV性色在线观看| 韩国亚洲伊人久久综合影院| 美国毛片亚洲社区在线观看| www.亚洲一区| 亚洲精品高清在线| 亚洲伊人久久综合中文成人网| 亚洲AV无码一区二区三区在线观看| 精品国产日韩亚洲一区91| 国产精品亚洲а∨天堂2021| 亚洲国产精品不卡毛片a在线| 亚洲国产日韩成人综合天堂| 国产亚洲成人久久| 亚洲精品午夜无码电影网| 久久亚洲免费视频| 亚洲麻豆精品果冻传媒| 亚洲一线产区二线产区精华| 亚洲影院天堂中文av色| 国产亚洲成在线播放va| 国产成人精品亚洲精品| 亚洲国产精品无码av| 亚洲精品资源在线| 亚洲日日做天天做日日谢| 久久亚洲精品无码gv| 国产亚洲自拍一区| 亚洲AV综合色区无码另类小说| 久久久久久久亚洲Av无码|