06 2017 档案
摘要:旧版的复制有同步和命令传播 同步: 如上图: 从向主发送sync,主服务器开始bgsave生成RBD并且将bgsave执行过程中执行的命令追加到AOF缓冲区。最后分别发送给从服务区 如果主服务器被修改了,那么他也需要使用命令传播传给从服务器 旧版本的复制主要缺陷在于断线后和初始其实是一个样的。 sy
阅读全文
摘要:发送命令请求: (1)当客户端向服务器发送命令的时候,客户端首先会将命令请求转化哪位协议格式,然后发送给服务器 (2)server读取命令请求,进行解析,解析出argv和argc,并且将数据保存到输入缓冲区 (3)查找命令实现,查找命令对应的函数。 (4)执行预备操作 比如执行cmd指针指向的是否是
阅读全文
摘要:在服务器中,对于所有连接的客户端都会保存在一个链表里面 所以redisclient里面的客户端状态其实就有很多属性 (1)fd套接字描述符 根据fd值那么客户端也不同,如果是-1就是伪客户端,否则就是网络连接的客户端 (2)名字 如果不设置位NULL (3)标识: 比如主从REDIS_MASTER,
阅读全文
摘要:redis是一个事件驱动程序 主要包含 文件事件和时间事件 文件事件:主要就是server和client进行操作产生的文件 时间事件:主要就是一些需要定时执行的事件。 文件事件: 文件事件处理器是单线程运行的,但是通过IO多路复用,可以处理多个套接字 下面是文件事件处理器的结构 文件事件处理器主要是
阅读全文
摘要:AOF持久化是通话记录执行的命令进行存储的 AOF持久化的事先可以分为 (1)文件追加,新写入的命令都会被追加到redisserver的aof_buf缓冲区里面。 在服务器每一次执行事件循环的时候都会判断是否需要写入同步aof文件 这取决于服务器的配置 appendfsync值 always每一次都
阅读全文
摘要:redis是一个内存数据库,所有我们需要将他定时存在磁盘上,如果没有开启AOF,那么会生成RDB文件进行存储,其实就是个二进制文件 RBD文件通过SAVE BGSAVE进行创建, SAVE会阻塞服务器进程,如果执行的话,那么client在这个期间发出的请求都不会响应 BGSAVE其实是创建fork出
阅读全文
摘要:redis server有很多个数据库空间 如下如所示 dbnum表示的是数据库的数量,db指针指向的是一个redisdb数组,默认都是16个,每一个都是一个redisdb结构的数据库,redis client结构里面会有一个redisdb的指针,指向的就是其中的一个数据库 每一个redisdb里面
阅读全文
摘要:redis通过前面几篇的数据结构构键了一个对象系统,这个对象系统包含了字符串对象,列表对象,哈希对象,集合对象,有序集合对象 每一个对象都是一个redisobject type表示类型,有5种,就是 REDIS_STRING,REDIS_LIST,REDIS_HASH,REDIS_SET,REDIS
阅读全文
摘要:跳跃表事一种有序的结构,是有序集合键的底层实现 跳跃表有两种结构定义的,一个是node,一个是list,list控制着node node就是上面的结构,一个层,每个层有两个元素,一个是前进指针,一个是跨度。还有个后退指针,向后遍历的时候使用,跨度恒为1,还有一个分值和对象。分值就是从小到大依次向后的
阅读全文
摘要:字典:(符号表) 字典就是一个存储kv的存储结构,类似与c++的map,redis数据库的底层就是使用字典实现的 除了数据库,字典也是哈希键的底层实现 字典使用哈希表实现,哈希表中存储的都是kv结构 sizemask和哈希值一起决定了这儿节点应该放在哪里,我们每一个哈希表节点都有一个next属性,这
阅读全文
摘要:sds定义 struct sdshdr{ int len int free char buf[] } sds和c语言类似,仍然把字符串的末尾加上一个‘、0’,但是不会计入总长度,也就是不会对len造成影响,属于默认的,对使用者来说是透明的 根据这个数据的定义,我们可以判断出sds和c字符串的区别 (
阅读全文
摘要:看别的地方大致介绍的,粘贴过来 Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。 Docker 容器通过 Docker 镜像来创建。 容器与镜像的关系类似于面向对象编程中的对象与类。 Docker 镜像(Images) :Docker 镜像是用于创
阅读全文
摘要:type MusicEntry struct { Id string Name string Artist string Source string Type string}首先我们先设计一个结构体用来存储歌曲的结构,上面的musicentry就是,id代表唯一比那好,剩下的故名之意,type是便是
阅读全文
摘要:上面的是src中的主文件 algorithm中的主要是排序算法,我这里只有bubblesort,额外还可以有其他的,对于测试文件,我们只需要写_test.go就可以了, 我们可以在主程序中,使用swith进行选择,但是这里的swith遇到一个问题,就是当go build sorter的时候,总是报w
阅读全文
摘要:时间有限,简单记一些常用的,麻烦的不写了 定义变量:可以连续定义,也可以单个定义 var a int int类型 var a="ds" 默认string类型 a:="string" :=前面不可以有var 上面三种属于等价的 连续定义 var x1,x2,x3 int =1,2,3 name1,na
阅读全文
摘要:go的基础结构主要由下面的几个部分组成 1:包的声明 2:引入包 3:函数 4:变量 5:语句表达式 6注释 比如上面的第一行的package定义了包的名字,我们必须在第一行指定我们使用的包 下面我们使用import导入了fmt包,这是再告诉编译器我们使用的是哪个包,fmt包里面主要是实现了输出输出
阅读全文
摘要:花了不到一周的时间看完了一本reids设计与实现的书,感觉整体的设计有些地方的确很巧妙,各个结构之间联系的非常紧密,但是很简单,逻辑性的没有太多,但是学到了一个bitcount计数1的方法比较巧妙,记录下来 看了一个老外的介绍的很详细 转载过来 OK, let's go through the co
阅读全文
摘要:百度C++研发一面 1:指针2:char *a=new char a[] sizeof(a)大小 3:静态动态数组区别 4:new delete new[] delete [] malloc free底层实现 5:192.168.100.1 怎么存储 6:overlode override 7:un
阅读全文
摘要:两个多月,稀里糊涂的回来了,内心很迷茫,回来一周了,明知道还需要有一大堆东西需要去学,但是却找不到之前学习的状态,在寝室,在实验室,看着自己一向不喜欢的电视剧,无目的的逛着淘宝,刷着头条和知乎,就这么颓废着。 我需要振作起来了,路还很长,自己的能力也还有限,拿着别人羡慕的大厂offer,心里却并不开
阅读全文