首先需要了解什么是压缩表,推荐Redis设计与实现第二版:压缩列表_w3cschool

为什么要用压缩表呢?是快吗?

其实不是的,恰恰相反,ziplist 是为了节省内存而设计出来的一种数据结构。ziplist 与普通的双端列表不同的是,双端列表保存了前后指针,在Redis,一个指针是占了8个字节的。而ziplist是维护了上一个节点的长度和当前节点的长度,然后每次通过长度来计算出前后节点的位置。

ziplist涉及计算,肯定有性能上的损耗,所以ziplist并不快,但是它比双端列表少了前后指针,在空间上节省了。所以是一种时间换空间的策略。

为什么在Redis,一个指针是占了8个字节?

又又又又涉及到知识盲区了。。。。

因为现在的电脑最大为64位,那么Rerdis中的指针的存储空间必须是大于等于64bit(位),也就是8个字节,少一个bit,都不能完整的表示完所有的寻址范围,因此就是8个字节。