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

溫馨提示×

溫馨提示×

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

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

redis五種數據結構的底層實現方法

發布時間:2021-07-07 11:25:56 來源:億速云 閱讀:129 作者:chen 欄目:互聯網科技

本篇內容主要講解“redis五種數據結構的底層實現方法”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“redis五種數據結構的底層實現方法”吧!

實現方法:1、每種數據結構都有自己底層的內部編碼實現,而且是多種實現,這樣Redis會在合適的場景選擇合適的內部編碼;2、每種數據結構都有兩種以上的內部編碼實現;3、內部編碼可以作為多種外部數據結構的內部實現。

本教程操作環境:windows7系統、Redis5.0.10版、DELL G3電腦。

Redis有五種基本數據結構:字符串、hash、set、zset、list。下面解釋下載Redis 3.0.6版本中底層是怎樣實現他們的。

總結一下

(1)每種數據結構都有自己底層的內部編碼實現,而且是多種實現,這樣Redis會在合適的場景選擇合適的內部編碼。

(2)可以看到每種數據結構都有兩種以上的內部編碼實現,例如string數據結構就包含了raw、int和embstr三種內部編碼。

(3)同時,有些內部編碼可以作為多種外部數據結構的內部實現,例如ziplist就是hash、list和zset共有的內部編碼。

動態字符串SDS

SDS是“simple dynamic string”的縮寫。Redis中所有場景出現的字符串,基本都是有SDS來實現的:

  • 所有非數字的key, 如:set msg “hello” 中的key msg

  • 字符串數據類型的值,如:set msg “hello” 中的value “hello”

  • 非字符串數據類型中的“字符串值”,如:rpush fruits “apple” “banana"中的"apple” “banana”

SDS長這樣:

redis五種數據結構的底層實現方法

free:還剩多少空間

len:字符串長度

buf:存放的字符數組

空間預分配

為減少修改字符串代理的內存重分配次數,SDS采用了“一次管夠“的策略:

  • 若修改之后SDS長度 < 1MB,則多分配現有len長度的空間

  • 若修改之后SDS長度 >= 1MB ,則擴充除了滿足修改之后的長度外,額外多1MB空間。

惰性空間釋放

為避免縮短字符串時候的內存重分配操作,SDS在數據減少時,并不立刻釋放空間。

int

就是redis中存放的各種數字,包括故意加“”的

set game “111”

雙向鏈表

雙向鏈表如lpush, rpush, lpop, rpop

長這樣:

redis五種數據結構的底層實現方法

分兩部分:

  • “統籌部分”:橘黃色

    • head:指向具體雙向鏈表的頭

    • tail:指向具體雙向鏈表的尾

    • len:雙向鏈表的長度

  • “具體實施方”:藍色

    • 有前驅pre和后繼next

雙向鏈表由 list 和 listNode 兩個數據結構構成。

到此,相信大家對“redis五種數據結構的底層實現方法”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

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

AI

宁武县| 汽车| 富顺县| 通许县| 金堂县| 宝兴县| 迁安市| 精河县| 塘沽区| 蒲江县| 远安县| 图片| 洞口县| 林西县| 富平县| 黄梅县| 昌宁县| 连城县| 中江县| 乌鲁木齐市| 博客| 哈尔滨市| 蚌埠市| 长葛市| 唐河县| 泰和县| 漳平市| 富裕县| 故城县| 昌都县| 南召县| 和顺县| 贵阳市| 博白县| 图们市| 原阳县| 白城市| 扎囊县| 唐河县| 迭部县| 进贤县|