SDS

redis基本数据结构学习

萝らか妹 提交于 2019-11-27 03:37:53
简单动态字符串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; //表头节点

Redis 设计与实现,看 SDS(Simple Dynamic String) 感悟

人盡茶涼 提交于 2019-11-26 14:31:38
Redis 设计与实现,看 SDS(Simple Dynamic String) 感悟 今天在看 Redis 设计与实现这本书的时候,发现了里面系统定义的数据结构 SDS,中文名为 简单动态字符串。对其设计的思想挺有收获的。 SDS 的定义,位于 sds.h/sdshdr 中:结构如下: struct sdshdr{ // len 为 buf 数组中已使用字节的数量,等于 SDS 所保存的字符串的长度 int len; // buf 中未使用字节的数量 int free; // 字节数组,用于保存字符串 char buf[]; } SDS 与 C 字符串的区别: C 语言使用长度为 N+1 的 字符数组来表示长度为 N 的字符串, 并且字符串最后一个元素总为 \0 C 字符串并不记录自身的长度信息,所以 取长度的操作为 O(N),SDS 的取长度操作为 O(1) C 语言容易 缓冲区 溢出,由于其不记录自身长度所带来的。 接下来是关键: 空间预分配 和 惰性空间释放 这两种优化策略。 空间预分配 主要用于优化 SDS 的字符串增长操作:当 SDS 的API 对一个 SDS 进行修改,并且需要对 SDS 进行空间扩展时,程序不仅会为 SDS 分配修改所需要必须要的空间,还会为 SDS 分配额外未使用的空间。 额外分配的算法如下: if len < 1MB free = len;

redis2. sds 字符串(SimpleDynamicString)

白昼怎懂夜的黑 提交于 2019-11-26 09:45:31
1.标准strcat 会有溢出风险,sdscat无溢出风险 2.空间预分配,惰性空间释放 空间预分配:sds分配空间时,如果原来是5,free是0, sdscat追加一个10长度的,此时字符串加长到15,free也同时分配15,总长为15 + 15free + 1(/0) 为31字节; 若大于1M后则以1M为单位追加。 这么做的原因是,内存分配是比较耗时的操作【 https://baike.baidu.com/item/realloc/659993?fr=aladdin 】,在原地址空间后面若无足够的可用空间,还需要内存拷贝。这样预分配free空间以减少后续的内存分配操作。 惰性过期:free后不会释放空间,会把减少的字符长度追加到free上。 3.二进制安全 来源: https://www.cnblogs.com/do-your-best/p/11903450.html

php+JS版 抑郁症测试题SDS 抑郁症在线测试

China☆狼群 提交于 2019-11-25 20:53:54
近年来,随着公众对精神卫生的关注,“抑郁症”这个名词频繁出现在媒体报道中。那么,究竟什么是抑郁症?是不是就是大家所说的瞎矫情、太脆弱? 某天突然心血来潮,开发了这个抑郁症在线测试程序: https://www.zxgj.cn/g/yiyuzheng 试试呗,反正试试又不会怀孕的! 韩国艺人崔雪莉在京畿道城南市的家里被发现身亡,年仅25岁。警方推测是自杀,现在正在进行调查。在向警方陈述时,崔雪莉经纪人传达了雪莉生前患有严重抑郁症的情况。不论是明星还是普通人,对每个病人来说,“抑郁症”的标签背后,都是一种具体的痛苦。而除了抑郁症患者,没有人可以真正了解抑郁带来的痛苦和绝望。 一提到抑郁症,很多人会把它这种病当成脆弱、矫情、想不开,甚至还有人说,就是因为太闲,想太多。但事实并非如此。抑郁症就是一种疾病,而且可能比你想象中的更严重。 来源: oschina 链接: https://my.oschina.net/u/4250950/blog/3133449