MST

星途 面试题库

面试题:Redis RDB文件结构中的数据类型编码方式

在Redis RDB文件结构中,不同的数据类型是如何进行编码存储的?请举例说明常见数据类型如字符串、哈希表在RDB文件中的编码方式及其特点。
25.4万 热度难度
数据库Redis

知识考点

AI 面试

面试题答案

一键面试

字符串编码存储

  1. 编码方式:在Redis RDB文件中,字符串根据其长度不同有不同编码方式。如果字符串长度小于等于39字节,采用embstr编码,这种编码方式将Redis对象头和字符串实际内容连续存储在一块内存中。如果字符串长度大于39字节,采用raw编码,此时Redis对象头和字符串内容分开存储。
  2. 特点embstr编码优点在于内存分配和释放只需一次系统调用,减少内存碎片,提升性能,且对象头和内容紧密相连利于缓存命中。raw编码适用于长字符串,灵活性高,但由于内存分配可能导致内存碎片,且多次内存操作开销较大。

哈希表编码存储

  1. 编码方式:哈希表在RDB文件中有两种主要编码,ziplist(压缩列表)和hashtable(哈希表)。当哈希表元素个数较少且每个元素的键和值长度较短时,采用ziplist编码。ziplist是一种紧凑的顺序存储结构,它将所有元素依次紧凑存储。当哈希表元素个数较多或者元素的键或值长度较长时,采用hashtable编码,hashtable是一种基于散列表的数据结构,通过哈希函数计算存储位置。
  2. 特点ziplist编码节省内存,适合小哈希表场景,但其查找、插入和删除操作时间复杂度相对较高,为O(n)。hashtable编码查找、插入和删除操作平均时间复杂度为O(1),性能高效,但在元素个数较少时会比ziplist占用更多内存。