redis基本数据结构学习
简单动态字符串SDS 1.数据结构 struct sdshdr { //记录buf数组中的已使用字节 //等于SDS所保存字符串的长度 int len; //记录buf中未使用字节的数量 int free; //字节数组,用于保存字符串 char buf[]; } 2.SDS与C字符串的区别 链表 常数复杂度获取字符串长度 通过len变量获取,不用每次调用strlen函数和,strlen函数复杂度为O(n) 杜绝缓存区溢出 SDS中buf变量修改时,先检查SDS空间是否满足修改所需的要求,如果不满足,会自动将SDS的空间扩展至所需的大小。然后在执行修改 减少修改字符串时带来的内存重分配次数 由于内存重分配涉及复杂的算法,并且可能需要执行系统调用,所以通常是一个比较耗时的操作。redis作为数据库,经常被用于速度要求严苛、数据被频繁修改的场合,如果这种修改频繁地发生的话,可能还会对性能造成影响。 空间预分配 惰性空间释放 二进制安全 兼容部分C字符串函数 1.数据结构 typedef struct listNode { struct listNode *prev;//前置节点 struct listNode *next;//后置节点 void *value; //节点的值 } listNode; typedef struct list { listNode *head; //表头节点