面试题答案
一键面试字符串编码存储
- 编码方式:在Redis RDB文件中,字符串根据其长度不同有不同编码方式。如果字符串长度小于等于39字节,采用
embstr
编码,这种编码方式将Redis对象头和字符串实际内容连续存储在一块内存中。如果字符串长度大于39字节,采用raw
编码,此时Redis对象头和字符串内容分开存储。 - 特点:
embstr
编码优点在于内存分配和释放只需一次系统调用,减少内存碎片,提升性能,且对象头和内容紧密相连利于缓存命中。raw
编码适用于长字符串,灵活性高,但由于内存分配可能导致内存碎片,且多次内存操作开销较大。
哈希表编码存储
- 编码方式:哈希表在RDB文件中有两种主要编码,
ziplist
(压缩列表)和hashtable
(哈希表)。当哈希表元素个数较少且每个元素的键和值长度较短时,采用ziplist
编码。ziplist
是一种紧凑的顺序存储结构,它将所有元素依次紧凑存储。当哈希表元素个数较多或者元素的键或值长度较长时,采用hashtable
编码,hashtable
是一种基于散列表的数据结构,通过哈希函数计算存储位置。 - 特点:
ziplist
编码节省内存,适合小哈希表场景,但其查找、插入和删除操作时间复杂度相对较高,为O(n)。hashtable
编码查找、插入和删除操作平均时间复杂度为O(1),性能高效,但在元素个数较少时会比ziplist
占用更多内存。