Files
NoteBook/Redis/6. 数据类型与数据结构.md
2025-09-27 22:59:31 +08:00

113 lines
3.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 数据类型与数据结构
![关系](https://cdn.xiaolincoding.com//mysql/other/9fa26a74965efbf0f56b707a03bb9b7f-20230309232518487.png)
## SDS
- 基于 C 语言
- 改进 C 字符串
- C 字符串缺陷
- 长度统计慢
- 无法存二进制数据 `\0`提前结束
- 新设计
- `len` 字符串长度
- `alloc` 分配空间长度
- `flags` sds 类型
- `buf[]` 字节数组
- 扩容机制
- `<1MB` 翻倍
- `>=1MB` +1MB
- 应用场景
- Redis 中字符串值的底层实现
- 用于存储键名和字符串值
- 用于实现 Redis 的各种命令,如 GET、SET、APPEND 等
- 优势
- 高效的字符串拼接操作
- 避免缓冲区溢出
- 支持二进制数据存储
- 高效的长度获取和内存管理
## quicklist
- 结构组成
- 由多个 listpack 组成的双向链表
- 每个 listpack 保存一定数量的元素
- 设计目的
- 结合了链表和数组的优点
- 减少内存碎片
- 提高内存使用效率
- 应用场景
- Redis 中 list 类型的底层实现
- 用于存储有序列表数据
- 优势
- 内存使用更紧凑
- 支持快速的头尾插入和删除操作
- 可以通过配置控制 listpack 的大小和数量
## listpack
- 定义
- 一种紧凑的、内存优化的数据结构
- 用于存储键值对的列表
- 特点
- 以连续内存块的形式存储数据
- 每个元素包含长度和数据部分
- 通过偏移量访问元素
- 应用场景
- Redis 中 list 类型的底层实现
- 用于存储小规模的列表数据
- 优势
- 内存使用效率高
- 适合存储小规模数据集
- 读写性能较好
## 哈希表
- 定义
- 一种基于键值对存储的数据结构
- 通过哈希函数计算键的哈希值,确定数据存储位置
- 结构组成
- 哈希表数组(bucket array)
- 每个 bucket 可能包含多个键值对
- 链表或树结构处理哈希冲突
- 应用场景
- Redis 中 hash 类型的底层实现
- 用于存储对象属性或配置信息
- 优势
- 平均时间复杂度为 O(1) 的查找、插入和删除操作
- 适合存储键值对数据
- 支持动态扩容和缩容
## 整数集合
- 定义
- 一种专门用于存储整数的有序数据结构
- 通过有序数组实现
- 特点
- 存储的元素都是整数类型
- 元素按升序排列
- 支持快速查找和范围查询
- 应用场景
- Redis 中 set 类型的底层实现(当元素都是整数时)
- 用于存储有序的整数集合
- 优势
- 内存使用效率高
- 支持高效的查找和范围操作
- 适合存储整数数据集
## 跳表
- 定义
- 一种多层链表结构,通过在链表上添加多级索引提高查找效率
- 结构组成
- 多层链表结构
- 每一层的节点数量递减
- 通过概率算法决定节点的层数
- 应用场景
- Redis 中 sorted set 类型的底层实现
- 用于存储有序集合数据
- 优势
- 平均时间复杂度为 O(log n) 的查找、插入和删除操作
- 实现相对简单
- 支持范围查询和有序遍历