Redis 的每种数据结构(String、List、Hash、Set、Sorted Set)在底层都采用了不同的实现方式,根据数据规模和特性动态选择最优的编码(encoding)以节省内存和提高性能。以下是详细原理分析:
1. String(字符串)
底层实现:
-
int:当存储整数值且可用
long
表示时,直接使用整数存储。 -
embstr:当字符串长度 ≤ 44 字节时,使用连续内存分配的嵌入式字符串(Redis 3.2+)。
-
raw:当字符串长度 > 44 字节时,使用动态字符串(SDS, Simple Dynamic String)。
SDS 特点:
-
预分配空间减少内存重分配次数。
-
二进制安全(可存储任意二进制数据)。
-
常数复杂度获取字符串长度(
len
字段)。
2. List(列表)
底层实现:
-
ziplist(压缩列表):
-
适用条件ÿ
-