91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

redis SDS的數據結構是怎樣的

發布時間:2022-01-15 15:49:57 來源:億速云 閱讀:174 作者:iii 欄目:大數據

本篇內容介紹了“redis SDS的數據結構是怎樣的”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

一 前言

redis的字符串數據結構SDS(Simple Dynamic String), 其意指簡單的動態字符串,字面上的含義就是smiple 代指簡單,操作簡單,使用者能夠快點理解上手,無需關心redis內部實現;Dynamic 指動態擴展,表是能夠自動的對內存空間進行動態分配;String 表示字符串,不難理解。

二 SDS結構

2.1 redis SDS數據結構

redis3.2之前數據結構如下;

struct sdshdr {
    unsigned int len;   
    unsigned int free;  
    char buf[];         
};
  • len 表示 buf(緩沖區)中已經使用的空間長度;

  • free 表示 buf中未使用的長度;

  • buf[] 表示緩沖區數組,存儲字符;

2.12 redis 緩沖區結構

更加的形象的一個存儲圖像如下 buf 中的實際大小為 11(len + free + 1),其中已經使用空間 len = 5 , 未使用空間 free=5; 保留位空字符 \0 占一位;當我們在redis儲存進一個字符串zxzxz 的時候 就已經給我們分配好了內存空間,以及后面能用使用的內存空間;如果是c 語言那么要得到一個 zxzxz 字符長度就需要遍歷整個字符數組 遇到 \0 (C語言以\0區分內存空間中的字符串)后結束,才計算出一個字符串的長度,然而redis只需要一個sdslen(非c語言讀者不必糾結此類API) 就可以計算得出字符串長度; 從算法角度來看 redis 的一次獲取字符串長度 為 O(1), c 語言 為 O(N), 所以redis 快很多;

redis SDS的數據結構是怎樣的

2.2 redis 空間分配策略

其次通過上圖可以發現 儲存一個字符串 zxzxz , 其所占長度為5 , 為使用空間為5,\0 占1 ;原因是 redis字符串 儲存大小小于1MB 的時候 , 存儲任意的字符串, 其 free大小永遠與 自身的大小相同;當字符串 大小大于1MB時,其就分配free大小固定為1MB, 此稱為空間預分配策略; 如果是c語言 則需要 計算當前字符串在buf中的長度,再計算即將追加的字符串長度,然后分配空間大小;故redis 的速度是相當快,相比于c 操作內存空間;

c 語言 在操作內存空間的時候要不斷的計算大小,在追加字符串的時候分配空間大小,如果未進行分配,那么追加的字符串有可能覆蓋已經 已經儲存到 內存空間的字符串; 比如 內存空間 儲存 zzz \0kkk\0; 儲存 zzz 的時候所占用3 個位,加一個未分配空間1位,如果向zzz字符串進行追加一個ggg, 那么在未進行計算分配空間的情況下 原有的數據會變成 zzzggg\0k\0, 很直觀的發現 內存溢出, 第一個字符串就覆蓋至第二個字符串的部分內容;

所以 redis 的操作內容空間是杜絕內存溢出,并且能夠儲存圖片,視頻等二進制數據,如果是c語言操作儲存,二進制文件中一個\0就可能導致內存泄漏,緩沖區溢出等,故c語言一般只操作文本文件;

“redis SDS的數據結構是怎樣的”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

湄潭县| 涟水县| 南康市| 宝坻区| 都昌县| 龙南县| 芒康县| 桑日县| 张家界市| 海宁市| 渑池县| 浮山县| 武川县| 河津市| 高台县| 金溪县| 抚州市| 大关县| 自贡市| 侯马市| 湘潭市| 贵南县| 如东县| 夏津县| 桂阳县| 泸水县| 纳雍县| 昆明市| 二手房| 平谷区| 林西县| 白水县| 安岳县| 勐海县| 道孚县| 上杭县| 修武县| 喀什市| 色达县| 四平市| 尼玛县|