1. 数据结构设计
Redis 的高性能很大程度上归功于其内部精心设计的数据结构。Redis 支持五种基本数据类型:字符串(String)、列表(List)、集合(Set)、有序集合(Sorted Set)和哈希(Hash),每种数据类型都通过优化的数据结构来实现。
1.1 字符串(String)
字符串是 Redis 中最基本的数据类型,它不仅支持简单的字符串操作,还支持复杂的操作如自增、自减和位操作。Redis 内部使用动态字符串(SDS)结构来实现字符串,SDS 具有以下优点:
- 预分配空间:为了减少内存分配次数,SDS 会预分配空间。当字符串长度小于 1MB 时,每次扩展会分配当前长度的两倍;当长度大于 1MB 时,每次扩展会分配 1MB。
- 空间回收:当字符串缩短时,SDS 不会立即释放多余的空间,而是通过懒惰回收机制在未来使用时重新分配。
- 常数时间获取长度:SDS 记录了当前字符串的长度,因此获取长度操作是 O(1) 的。