简单动态字符串
在 Redis 里面,C 字符串只会作为字符串字面量(string literal),用在一些无须对字符串值进行修改的地方,比如打印日志:
当 Redis 需要的不仅仅是一个字符串字面量,而是一个可以被修改的字符串值时,Redis 就会使用 SDS 来表示字符串值:比如在 Redis 的数据库里面,包含字符串值的键值对在底层都是由 SDS 实现的。
那么 Redis 将在数据库中创建了一个新的键值对,其中:
又比如说,如果客户端执行命令:
除了用来保存数据库中的字符串值之外,SDS 还被用作缓冲区(buffer):AOF 模块中的 AOF 缓冲区,以及客户端状态中的输入缓冲区,都是由 SDS 实现的,在之后介绍 AOF 持久化和客户端状态的时候,我们会看到 SDS 在这两个模块中的应用。
本章接下来将对 SDS 的实现进行介绍,说明 SDS 和 C 字符串的不同之处,解释为什么 Redis 要使用 SDS 而不是 C 字符串,并在本章的最后列出 SDS 的操作 API 。