Redis设计与实现:读书笔记之一】的更多相关文章

前言 项目里用到了redis数据结构,不想只是简单的调用api,这里对我的读书笔记做一下记录.原文地址: http://www.redisbook.com/en/latest/internal-datastruct/sds.html 数据类型定义 与sds实现有关的数据类型有两个,一个是 sds: // 字符串类型的别名 typedef char *sds; 另一个是 sdshdr: // 持有sds的结构 struct sdshdr { // buf中已经被使用的字符串空间数量 int len…
链表作为最基础的数据结构,在许多高级语言上已经有了很好的实现.由于redis采用C语言编写,需要自己实现链表,于是redis在adlist.h定义了链表类型.作者对于这部分没什么好说,源码比较简单,如果这方面没有接触过的话,作者也耐心地推荐了几本书供参考.为了提高效率,这里的链表指的是双向链表,使得某一个元素访问它的前驱与后继的时间复杂度均为O(1). 不多说,进入正题,首先可以看到节点的数据结构的代码如下: typedef struct listNode { struct listNode *…
作为redis最基础的底层数据结构之一,SDS提供了许多C风格字符串所不具备的功能,为之后redis内存管理提供了许多方便.它们分别是: 二进制安全 减少字符串长度获取时间复杂度 杜绝字符串溢出 减少内存分配次数 兼容部分C语言函数 下面将简要阐述SDS基础结构,并介绍这些功能相应的实现细节. SDS字符类型定义非常简单,以redis3.0.7为例: typedef char *sds; struct sdshdr { unsigned int len; //定义当前字符串长度(不包含'\0')…
1 Redis 是C语言实现的 2 C字符串是 /0 结束的字符数组 3 Redis具体的动态字符串实现 /* * 保存字符串对象的结构 */ struct sdshdr { // buf 中已占用空间的长度 使求字符串长度操作变成0(1) int len; // buf 中剩余可用空间的长度 对字符串字符增加修改时 不大于len+free不用重新分配内存(初始化一个字符串时free为0 当修改字符串时会对free进行赋值) int free; // 数据空间 char buf[]; }; sd…
redis如何实现主从同步的高效率?? 主从复制的同步有一个命令数据的同步文本,然后利用两个不同服务器的偏移量来进行进行同步,避免每次都是全部同步(并非会保存所有的命令数据,而是会有一个缓冲区(比如1M,比如2M),如果偏移量在这个缓冲区里面则是会部分同步) redis的备份包括保存数据的二进制和命令的同步,第一种方式相当于把当前内存的数据都保存下来,而第二种相当于把所有的命令都保存下来然后进行保存,恢复的时候把命令读取出来进行恢复 数据的备份方式: 使用进程内存复制,当要数据备份的时候,for…
前言 首先,贴一下参考链接: http://www.redisbook.com/en/latest/internal-datastruct/adlist.html, 另外真赞文章的作者,一个90后的小伙真不错,基本功扎实,而且非常乐于助人 概述 链表是Redis的核心数据结构之一,它不仅大量应用在Redis自身内部的实现中,而且它也是Redis的List的结构的底层实现之一 这里分析的是Redis源码里adlist.h和adlist.c 数据结构 Redis的链表结构是一种典型的双端链表doub…
list结构体 adlist.h/list(源码位置) /* * 双端链表结构 */ typedef struct list { // 表头节点 listNode *head; // 表尾节点 listNode *tail; // 节点值复制函数 void *(*dup)(void *ptr); // 节点值释放函数 void (*free)(void *ptr); // 节点值对比函数 int (*match)(void *ptr, void *key); // 链表所包含的节点数量 unsi…
Linux内核设计与实现  读书笔记: http://www.cnblogs.com/wang_yb/tag/linux-kernel/ <深入理解LINUX内存管理> http://blog.csdn.net/yrj/article/category/718110 Linux内存管理和性能学习笔记(一) :内存测量与堆内存  第一篇 内存的测量 2.1. 系统当前可用内存 # cat /proc/meminfoMemTotal:        8063544 kBMemFree:      …
先占坑 老实说看这本书的时候,有很多地方都很迷糊,但却说不清楚问题到底在哪里,只能和Effective C++联系起来,更深层次的东西就想不到了. 链接: https://blog.csdn.net/cloudqiu/article/details/55060108 C++语言的设计与演化推荐 https://blog.csdn.net/csdnnews/article/details/79777598 语言发展历史 https://blog.csdn.net/weiwenhp/article/…
  简介 作者Steve Krug,惯例先去了解一下本书的作者,发现书中介绍的并不多,百度一下后发现这本书比作者出名.好吧,百度就是这样子,作者自称web可用性咨询师,手上这本书是第三版再版,第一版2000年出版,2013年出版第三版,最大的变化大概是综合啦,原来凉拌是网站的可用性,这次是web和mobile.作者书中说,互联网时代,13年就像100年那么久,想想我们的cpu和手机这3年的更替,何况现在都16年啦.我想这本书之所以称为互联网必读书之一大概是因为它定义啦许多“本该如此”的原则问题,…