Redis原理中,String数据类型是如何高效存储和操作长尾词的?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1306个文字,预计阅读时间需要6分钟。
String + 数据结构 + 首先我来了解一下,Redis 中 String 的数据结构:我们称之为 SDS(Simple Dynamic String)+ 简单动态字符串 + struct sdshdr { // 记录 buf 数组中已使用的字节数(等同于字符串的长度 strlen) int len; // 记录 buf 数组中分配的总字节数 int alloc; // 可能包含额外字节的空间,用于缓冲扩展等 }
String 数据结构首先我来看下, Redis 中 String 的数据结构:
我们称之为 SDS (Simple Dynamic String) 简单动态字符串
struct sdshdr {
//记录buf数组中已经使用的字节数(等价于字符串的长度strlen)
int len;
//记录buf数组中未使用的字节数(用于动态扩容)
int free;
//字节数组,用于保存字符串
char buf[];
}
对比C语言字符串:
-
优化了获取字符串长度的时间复杂度为: O(1)
因为 SDS 维护了一个 len 字段,这个字段的设置和更新是由 SDS 的 API 在执行时自动完成的。
本文共计1306个文字,预计阅读时间需要6分钟。
String + 数据结构 + 首先我来了解一下,Redis 中 String 的数据结构:我们称之为 SDS(Simple Dynamic String)+ 简单动态字符串 + struct sdshdr { // 记录 buf 数组中已使用的字节数(等同于字符串的长度 strlen) int len; // 记录 buf 数组中分配的总字节数 int alloc; // 可能包含额外字节的空间,用于缓冲扩展等 }
String 数据结构首先我来看下, Redis 中 String 的数据结构:
我们称之为 SDS (Simple Dynamic String) 简单动态字符串
struct sdshdr {
//记录buf数组中已经使用的字节数(等价于字符串的长度strlen)
int len;
//记录buf数组中未使用的字节数(用于动态扩容)
int free;
//字节数组,用于保存字符串
char buf[];
}
对比C语言字符串:
-
优化了获取字符串长度的时间复杂度为: O(1)
因为 SDS 维护了一个 len 字段,这个字段的设置和更新是由 SDS 的 API 在执行时自动完成的。

