MST

星途 面试题库

面试题:Redis RDB文件中数据类型的存储特征

请阐述Redis RDB文件中常见数据类型(如字符串、哈希、列表、集合、有序集合)在文件中的存储特征,包括数据结构表示、编码方式等方面。
11.6万 热度难度
数据库Redis

知识考点

AI 面试

面试题答案

一键面试

字符串

  1. 数据结构表示
    • 在RDB文件中,字符串对象以简单动态字符串(SDS)的形式存储。SDS结构包含长度信息,以便快速获取字符串长度,而不需要遍历整个字符串。
    • 对于小于等于20字节的字符串,会直接以紧凑格式存储在RDB文件中。
  2. 编码方式
    • INT编码:如果字符串内容是整数值,并且这个整数值可以用64位有符号整数表示,Redis会将其编码为INT,直接存储整数值,这样可以节省空间。
    • RAW编码:对于一般的字符串,采用RAW编码,即将SDS内容直接写入RDB文件,包括长度和实际内容。

哈希

  1. 数据结构表示
    • RDB文件中哈希对象存储为一系列键值对。哈希对象内部使用字典结构来存储这些键值对,字典的每个节点包含键和值的指针。
    • 在RDB文件中,先存储哈希对象的元素个数,然后依次存储每个键值对。
  2. 编码方式
    • HT编码:当哈希对象的键值对数量较多,或者键值对中的键或值长度较长时,采用哈希表(HT)编码。这种编码方式使用字典结构来存储键值对,通过哈希函数来快速定位键值对。
    • ZIPLIST编码:当哈希对象的键值对数量较少(默认小于等于512个),并且键值对中的键和值长度较短(小于64字节)时,采用压缩列表(ZIPLIST)编码。ZIPLIST是一种紧凑的、连续内存存储结构,通过特殊的编码格式将多个键值对存储在一起,以节省空间。

列表

  1. 数据结构表示
    • RDB文件中列表对象存储为一系列元素。列表对象在Redis内部可以由双向链表或压缩列表实现。
    • 在RDB文件中,先存储列表的长度,然后依次存储每个元素。
  2. 编码方式
    • LINKEDLIST编码:当列表元素较多,或者元素长度较长时,采用双向链表(LINKEDLIST)编码。双向链表每个节点包含前驱和后继指针以及元素值,便于在列表两端进行插入和删除操作。
    • ZIPLIST编码:当列表元素较少(默认小于等于512个),并且元素长度较短(小于64字节)时,采用压缩列表(ZIPLIST)编码,与哈希对象的ZIPLIST编码类似,通过紧凑的连续内存结构存储元素以节省空间。

集合

  1. 数据结构表示
    • RDB文件中集合对象存储为一系列成员。集合对象在Redis内部使用哈希表或整数集合实现。
    • 在RDB文件中,先存储集合的元素个数,然后依次存储每个成员。
  2. 编码方式
    • HT编码:当集合成员数量较多,或者成员为非整数值时,采用哈希表(HT)编码。哈希表通过哈希函数快速定位成员,实现快速的添加、删除和查找操作。
    • INTSET编码:当集合成员数量较少(默认小于等于512个),并且所有成员都是整数值,且这些整数值都可以用16位有符号整数表示时,采用整数集合(INTSET)编码。INTSET是一种紧凑的、有序的整数集合结构,通过特殊的编码格式存储整数,以节省空间。

有序集合

  1. 数据结构表示
    • RDB文件中有序集合对象存储为一系列成员及其分数。有序集合对象在Redis内部使用跳跃表和哈希表实现。
    • 在RDB文件中,先存储有序集合的元素个数,然后依次存储每个成员及其分数。
  2. 编码方式
    • SKIPLIST编码:当有序集合成员数量较多,或者成员长度较长时,采用跳跃表(SKIPLIST)和哈希表结合的编码方式。跳跃表用于实现有序集合的排序功能,通过多层链表结构实现快速的范围查询;哈希表用于快速定位成员,通过哈希函数实现快速的查找操作。
    • ZIPLIST编码:当有序集合成员数量较少(默认小于等于128个),并且成员长度较短(小于64字节)时,采用压缩列表(ZIPLIST)编码。在压缩列表中,按照分数从小到大存储成员及其分数,以紧凑的方式存储有序集合数据。