首先需要了解什么是壓縮表,推薦Redis設(shè)計(jì)與實(shí)現(xiàn)第二版:壓縮列表_w3cschool
為什么要用壓縮表呢吁恍?是快嗎扒秸?
其實(shí)不是的,恰恰相反冀瓦,ziplist 是為了節(jié)省內(nèi)存而設(shè)計(jì)出來的一種數(shù)據(jù)結(jié)構(gòu)伴奥。ziplist 與普通的雙端列表不同的是,雙端列表保存了前后指針翼闽,在Redis拾徙,一個(gè)指針是占了8個(gè)字節(jié)的。而ziplist是維護(hù)了上一個(gè)節(jié)點(diǎn)的長度和當(dāng)前節(jié)點(diǎn)的長度感局,然后每次通過長度來計(jì)算出前后節(jié)點(diǎn)的位置尼啡。
ziplist涉及計(jì)算,肯定有性能上的損耗询微,所以ziplist并不快崖瞭,但是它比雙端列表少了前后指針,在空間上節(jié)省了撑毛。所以是一種時(shí)間換空間的策略书聚。
為什么在Redis,一個(gè)指針是占了8個(gè)字節(jié)藻雌?
又又又又涉及到知識(shí)盲區(qū)了雌续。。胯杭。驯杜。
因?yàn)楝F(xiàn)在的電腦最大為64位,那么Rerdis中的指針的存儲(chǔ)空間必須是大于等于64bit(位)做个,也就是8個(gè)字節(jié)鸽心,少一個(gè)bit腔呜,都不能完整的表示完所有的尋址范圍,因此就是8個(gè)字節(jié)再悼。