简单动态字符串(SDS)
1 2 3 4 5 6
| struct __attribute__ ((__packed__)) sdshdr8 { uint8_t len; uint8_t alloc; unsigned char flags; char buf[]; }
|
不包括头的意思是:redis在新建完sds,并不会直接返回这个结构体,而是返回buf的地址,这样就可以直接使用string.h
里面的方法进行处理,所以下面:
1
| #define SDS_HDR(T,s) ((struct sdshdr##T *)((s)-(sizeof(struct sdshdr##T))))
|
这个就是输入T(是sdshdrT),s就是字符串的首地址,这样处理就可以通过字符串的首地址获得整个结构体
ziplist
结构为:
1 2 3 4 5
| +-------+---------------------------- |4 byte |4 byte |2 byte | +-------+ |zlbytes|zltail |entries|
|