Redis 使用 SDS API 来创建、管理和操作其内部的 Simple Dynamic String (SDS) 数据结构。SDS API 提供了一系列函数来高效、安全地处理字符串数据,以下是一些基本的 SDS API 函数示例及其用途:
-
创建 SDS
sds sdsnew(const char *init)
: 创建一个新的 SDS 字符串,初始内容为 C 字符串init
的副本。如果init
为空,则创建空字符串。这个操作的复杂度取决于初始化字符串的长度。
-
创建空 SDS
sds sdsempty()
: 创建一个空的 SDS 字符串,不包含任何内容,常用于初始化。
-
释放 SDS
void sdsfree(sds s)
: 释放给定的 SDS 字符串所占用的内存。释放过程会考虑 SDS 结构内预留的未使用空间,一次性完成释放操作。
-
获取属性
size_t sdslen(const sds s)
: 返回给定 SDS 字符串的实际长度。size_t sdsavail(const sds s)
: 返回给定 SDS 的剩余可用空间大小。
-
字符串操作
sds sdscat(sds s, const char *t)
: 将 C 字符串t
追加到 SDSs
后面。sds sdscpylen(sds s, const char *t, size_t len)
: 将 C 字符串t
的前len
个字符复制到 SDSs
中。sds sdscatprintf(sds s, const char *fmt, ...)
: 类似于 C 的printf
函数,将格式化的字符串追加到 SDSs
。
-
扩展和收缩
sds sdsMakeRoomFor(sds s, size_t addlen)
: 为 SDSs
预留更多的空间,确保至少能添加addlen
个新字符而不必立刻进行内存重分配。sds sdstrim(sds s, const char *cset)
: 删除 SDSs
开头和结尾处指定字符集cset
中的字符。
-
其他操作
int sdscmp(const sds s1, const sds s2)
: 比较两个 SDS 字符串的内容。sds sdsdup(const sds s)
: 复制给定的 SDS 字符串,返回一个新的 SDS,内容与原字符串相同。
SDS API 通过预先分配额外空间、记录字符串长度、支持二进制数据等方式,解决了传统 C 字符串存在的诸多问题,提升了 Redis 在处理字符串时的性能和安全性。