如何有效的学习?我觉得诀窍只有一个,多接触多看多读多想,然后不断的review and review。
1.redis数据结构
1.1 redis字符串
众所周知redis是用c写的,那么redis的字符串实现是否也跟c一样呢?答案是false。
redis的字符串实现,是在c字符的基础上封装的,示例代码如下:
struct sdshdr{
int len;
int free;
char buf[];
}
可以看到字符串的实现有三个变量:一个字符数组,还有int类型的free和len。数组是用来存储字符的自不必多说,那么len和free是干嘛用的呢?
其实,redis字符串的高效性,主要就是由这两个变量来控制实现的。len表示当前字符数组的存储长度,即存储的字节数,free表示当前空余字节数。举个例子:
字符串“Richard”,len = 7,free=2。什么意思呢?就是说当前字符串空余两个长度,占用八个长度(c中\0表示空字符,用来表示结尾)。