花了几天时间把《Redis设计与实现》读完了,把一些心得记下来给大家分享。
第2章 简单动态字符串
redis里面的字符串对象都采用SDS结构实现。SDS有别于C风格的字符数组和java的String(定长)。这种结构更像C++的String或者java的ArrayList。长度动态可变。
redis的所有键值及字符串字面量都采用这种结构。
这一章节花了十几...
分类:
其他好文 时间:
2015-08-09 00:30:22
阅读次数:
157
Redis数据类型之字符串redis的字符串redis的字符串不是C语言原生的字符串,而是自己构建的称为简单动态字符串(simple dynamic string),简称 SDS,和C语言原生的字符串相似,使用’\0’作为结尾。除了打印日志之外,我们操作字符串基本是在使用SDSSDS的在redis的主要功能 1. 保存数据库的字符串值
2. 用作缓冲区buffer
SDS在redis的定义
在源...
分类:
其他好文 时间:
2015-07-30 19:31:54
阅读次数:
129
公司一款手持终端,是在老产品代码的基础上研发,经常发生死机问题,死机原因很大部分是代码不严谨导致,今天排查遇到一个整型溢出导致的死机问题:在foo.c文件中定义有charg_sds_length=0;在foo.h文件中声明为externcharg_sds_length;但是在bar.c中有定义有voidapi_sds_rec_ha..
分类:
其他好文 时间:
2015-07-17 07:15:03
阅读次数:
128
几个概念1:key对象 数据库存储键值对的键,总是一个字符串对象。2:value对象数据库存储键值对的值,可以是字符串对象,list对象,hash对象,set对象,sorted set对象。 例如:set msg "hello world" 则redis在数据库中创建一个新的键值对,键和值都是一个....
分类:
其他好文 时间:
2015-07-06 01:21:55
阅读次数:
133
简单动态字符串(SDS):simple dynamic string,C字符串最后多一个空字符,SDS比C字符串更适合redis优点:1)C字符串长度要遍历,长度复杂度为O(n),SDS直接记录字符串长度,长度复杂度为O(1) 2)由于C字符串不记录字符串长度,易造成溢出,SDS空间分配策略完...
分类:
其他好文 时间:
2015-06-03 13:34:18
阅读次数:
126
Redis源码学习:字符串1.初识SDS1.1 SDS定义Redis定义了一个叫做sdshdr(SDS or simple dynamic string)的数据结构。SDS不仅用于 保存字符串,还用来当做缓冲区,例如AOF缓冲区或输入缓冲区等。如下所示,整数len和free分别表示buf数组中已使用的长度和剩余可用的长度,buf是一个原生C字符串,以\0结尾。sds就是sdshdr中char buf...
分类:
其他好文 时间:
2015-05-30 08:10:36
阅读次数:
101
真的是浅见,以后随着认识的加深,可能会更新该文。SDDC概述人家聊SDN、SDS等,VMware干脆跟大家聊SDDC(Software-Defined Data Center),即软件定义数据中心。SDDC是VMware大约三年前提出的概念,认为是云计算的终极形态,并提出数据中心可以通过三个步骤来实...
分类:
其他好文 时间:
2015-05-20 23:55:14
阅读次数:
303
首先,sds即simple dynamic string,redis实现这个的时候使用了一个技巧,并且C99将其收录为标准,即柔性数组成员(flexible array member),参考资料见这里。柔性数组成员不占用结构体的空间,只作为一个符号地址存在,而且必须是结构体的最后一个成员。柔性数组成...
分类:
其他好文 时间:
2015-05-17 18:40:34
阅读次数:
126
最近在阅读 redis 代码, 觉得 如何阅读 Redis 源码 提供了的阅读顺序还不错, 因为之前有读过 lua 代码, 也有一点经验, 作者建议的顺序还是比较合理的. 所以先从 redis 的内部字符串的实现开始看起, 在阅读过程中看到一个我个人认为很赞的技巧. 先贴代码:(不得不说, redis 的代码注释真是详尽到了极致 … lua的注释很本没法比啊)sds sdscatvprintf(sd...
分类:
其他好文 时间:
2015-05-16 21:53:25
阅读次数:
150
Redis的字符串采用的是自定义的struct,名字叫做简单动态字符串(simple dynamic string,SDS)。
结构如下:struct sdshdr{
int len;
int free;
char buf[];
};采用如此结构的好处是:
【1】获取length的时候复杂度为O(1),不需要O(n);
【2】动态分配空间,避免缓冲区溢出,避免每次修改或者append都重新分配;
【...
分类:
其他好文 时间:
2015-05-07 18:51:47
阅读次数:
99