redis获取sds字符串长度的疑问
typedef char *sds;
struct sdshdr {
long len;
long free;
char buf[0];
};
size_t sdslen(const sds s) {
struct sdshdr *sh = (void*) (s-(sizeof(struct sdshdr)));
return sh->len;
}
struct sdshdr *sh = (void*) (s-(sizeof(struct sdshdr)));
这一行看不懂,为什么可以直接在s的地址减去8,
...全文
相关推荐
redis内部数据结构之SDS简单动态字符串详解
此外,SDS还有其他优点,例如提供API来直接获取字符串长度、方便地进行字符串增长和缩短操作,以及避免了内存碎片问题,因为Redis在扩展字符串时会一次性分配足够大的空间。
详解redis数据结构之sds
sds的设计使得Redis能够以常数时间复杂度O(1)获取字符串长度,这是因为len字段直接存储了字符串的长度,避免了C语言字符串中需要遍历整个数组来计算长度的O(N)时间复杂度。
深挖 Redis 6.0 源码—SDS.docx
SDS通过在字符串开头添加一个len属性来记录字符串的实际长度,从而实现了二进制安全,即不受'\0'字符的影响,并能在常量时间内获取字符串长度。
使用SDS代码结构实现Redis字符串的编写.docx
#### Redis字符串的性能优势1. **快速获取字符串长度**:由于SDS结构中存储了已使用的字符长度`len`,因此可以直接返回此值来获取字符串长度,时间复杂度为`O(1)`。
redis源码阅读笔记(1)——sds
在C语言中,字符串是以字符数组的形式存在的,而sds是Redis为了优化字符串操作而设计的一种结构。它不仅包含了字符串的值,还记录了字符串的长度,这使得字符串长度的获取变得非常高效。


