Redis没有直接使用 C 语言的字符串,而是自己创建了名为 SDS (simple dynamic string, SDS) 的字符串。
- 什么是二进制安全?
C 语言中,用 “\0” 表示字符串的结束,如果字符串本身就有 “\0” 字符,字符串就会截断,既非二进制安全,若通过某种机制,保证读写字符串时不受损坏内容,则是二进制安全。
一、数据结构 ( 在 sds.h 中可以看到如下 5 种数据结构:)
struct __attribute__ ((__packed__)) sdshdr5 {
unsigned char flags; /* 低三位存储类型,高5位存储长度 */
char buf[]; /* 柔性数组,存放实际的内容 */
};
struct __attribute__ ((__packed__)) sdshdr8 {
uint8_t len; /* 已使用的长度,用1字节来存储 */
uint8_t alloc;/* 总长度,用 1 字节来存储 */
unsigned char flags; /* 低三位存储类型,高5位存储长度 */
char buf[];
};
struct __attribute__ ((__packed__)) sdshdr16 {
uint16_t len; /* 已使用的长度,用2字节来存储 */
uint16_t alloc; /* 总长度,用 2 字节来存储 */
unsigned char flags; /* 低三位存储类型