Redis
文章平均质量分 79
Redis
Code攻城狮
致力于技术研究与学习,喜欢解决bug。
展开
-
2.1 Redis中SDS的定义
SDS遵循C字符串以空字符结尾的惯例,保存在空字符的1字节空间不计算在SDS的len属性里面,并且为空字符分配额外的1字节空间,以及添加空字符到字符串末尾的操作都是由SDS函数自动完成的,所以这个空字符对于SDS的使用者来说是完全透明的。这个SDS和之前的区别在于,这个SDS为buf数组分配了5个未使用的字节空间,所以他的free 属性的值为5(图中,使用5个空格来表示5个未使用的字节空间)。2、len属性的值为5,表示这个SDS已经保存了一个5字节的字符串。//等于SDS所保存字符串的长度。原创 2022-11-29 10:16:08 · 478 阅读 · 0 评论 -
2.2 Redis中SDS(简单动态字符串) 与C字符串的区别
与C字符串不同的是,SDS 的空间分配策略完全杜绝了发生缓冲区溢出的可能性:当SDS的API需要对SDS进行修改时,API 会先检查SDS 的空间是否满足修改所需的要求,如果不满足的话,API 会自动将SDS 的空间扩展至执行修改所需的大小,然后才执行实际的修改操作问题,所以使用SDS既然不需要手动修改SDS的空间大小,也不会出现前面所说的缓冲区溢出问题。和C字符串不同的是,Redis 中 SDS 在len 属性中记录了SDS本身的长度,所以获取一个SDS长度的复杂度仅为O(1)。原创 2022-11-30 17:52:25 · 747 阅读 · 0 评论 -
2、Redis中简单动态字符串的简介,也就是Redis中的键和值的字符串底层表达
首先在Redis中,没有直接使用C语言传统字符串表示(以空字符结尾的字符数组,以下简称C字符串),而是自己构建了一种名为简单动态字符串(simple dynamic string,SDS)的抽象类型(可以简单的理解为Java中的String 类),并且将SDS用作Redis的默认字符串表示。C语言字符串://普通字符数组 printf("c0 = %s\n" , c0);//没有乱码,因为编译的时候,以字符串格式输出的时候,默认在数组尾部追加了'\0' char c1 [ ] = {原创 2022-11-28 17:20:06 · 586 阅读 · 0 评论