實現方法: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”
free:剩下多少空間len:字串長度buf:存放的字元陣列
空間預先分配
#為減少修改字串代理的記憶體重新分配次數,SDS採用了「一次管夠「的策略:惰性空間釋放
為避免縮短字串時候的記憶體重新分配操作,SDS在資料減少時,並不會立刻釋放空間。int
就是redis中存放的各種數字,包括故意加上「」的set game 「111 ”雙向鍊錶
雙向鍊錶如lpush, rpush, lpop, rpop長這樣: 分成兩部分:以上是redis五種資料結構如何底層實現的詳細內容。更多資訊請關注PHP中文網其他相關文章!