面试题答案
一键面试Redis压缩列表节点组成部分及其作用
- 前一个节点的长度(prevlen):
- 作用:用于记录压缩列表中前一个节点的长度。通过这个字段,可以从后向前遍历压缩列表。如果前一个节点的长度小于254字节,prevlen用1字节表示;如果大于等于254字节,则用5字节表示,其中第一个字节为0xFE(254),后面4个字节表示实际长度。
- 自身长度(encoding):
- 作用:用于描述当前节点的数据类型和长度。如果数据是小于等于63字节的字符串,encoding字段用1字节表示,低6位表示字符串长度;如果数据是大于63字节的字符串,encoding字段用3字节表示,第一个字节的最高两位为11,后6位和后面两个字节共同表示字符串长度。对于整数类型,encoding字段也有不同的编码方式来表示不同范围的整数。
- 数据(data):
- 作用:存储实际的数据内容,可以是字符串或者整数。
不同类型节点在存储上的区别
- 字符串类型节点:
- 短字符串:当字符串长度小于等于63字节时,encoding字段用1字节表示,低6位记录字符串长度,data部分直接存储字符串内容。
- 长字符串:当字符串长度大于63字节时,encoding字段用3字节表示,第一个字节高两位为11,后6位和后面两个字节共同表示字符串长度,data部分存储字符串内容。
- 整数类型节点:
- encoding字段采用特定的编码方式来表示不同范围的整数。例如,对于小范围的整数,可能采用紧凑的编码形式,直接在encoding字段中编码整数的值,而不需要额外的数据部分;对于较大范围的整数,则可能需要更多的字节来表示,data部分存储完整的整数值。 与字符串类型相比,整数类型节点在encoding的编码方式和数据存储形式上有明显区别,以达到更高效的存储和处理整数数据的目的。