摘要: replication的代码还没完全看完,先记录看到的一些东西: 1、master/slave之间的同步有两种方式,一种full sync,一种partial sync 2、full sync也有两种实现方式: 1). socket target,就是将rdb的内容通过socket回复给执行sync 阅读全文
posted @ 2017-11-01 20:25 flypighh 阅读(266) 评论(0) 推荐(0) 编辑
摘要: redis实现了对"事务"的支持,核心函数都在这里摘抄对于事务的定义:是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行它的4个特性:原子性、一致性、隔离性、持久性redis在事务的执行中并没有提供回滚操作,它会按顺序执行完队列中的所有命令而不管中间是否有命令出错(当然,执行 阅读全文
posted @ 2017-10-31 22:17 flypighh 阅读(1696) 评论(1) 推荐(0) 编辑
摘要: redis简单地实现了订阅发布功能。 pubsub涉及到的结构主要是下面两个: 没搞懂的是在redisClient中,为什么channel和pattern一个用dict一个用list? 对应的command: pattern的匹配,里面调用的equalStringObjects就是redis实现的正 阅读全文
posted @ 2017-10-31 20:31 flypighh 阅读(1663) 评论(1) 推荐(0) 编辑
摘要: 在看它的command处理之前,先说一下redis中C/S交互的流程(不知道怎么用图来表示流程,先码在这里): 1. 在initServer中调用aeCreateFileEvent给tcp listen socket注册 acceptTcpHandler 做为rfileProc2. 有客户端连接过来 阅读全文
posted @ 2017-10-31 20:02 flypighh 阅读(3348) 评论(0) 推荐(0) 编辑
摘要: serverCron是redis里主要的定时处理函数,在initServer中通过调用aeCreateTimeEvent,将serverCron做为callback注册到全局的eventLoop结构当中。它在主循环中的位置: 看serverCron的实现之前先看这个run_with_period的定 阅读全文
posted @ 2017-10-30 22:33 flypighh 阅读(1825) 评论(0) 推荐(1) 编辑
摘要: dict是redis中比较重要的结构了,不像sds, adlist那样是底层的基础结构。涉及到的相关结构体: 内部提供的操作也比较丰富,目前看到的主要还是dictCreate, dictAdd, dictReplace, dictDelect这几个基本操作。 当dict的大小发生改变时会开始reha 阅读全文
posted @ 2017-10-28 23:16 flypighh 阅读(298) 评论(0) 推荐(0) 编辑
摘要: adlist是redis中自己实现的一个双向链表,同时也提供迭代器操作。先上结构 对于list结构,可以看做是链表的头节点。相应地,内部提供了插入、删除、(利用迭代器)复制的操作。 只是它的rotate操作有些不懂,按照字面意思,rotate应该是是链表上所有元素倒序,但是它的实现上只是把tail节 阅读全文
posted @ 2017-10-28 23:16 flypighh 阅读(218) 评论(0) 推荐(0) 编辑
摘要: sds(Simple Dynamic String): 它其实就是普通的字符串,只是在每个字符串的前面加了一个管理用的头部,相关类型结构的定义如下 从定义上看,5种定义对应了最大长度不同的字符串,定义这5种不同的类型可能是为了尽量减少sdshdr占用的空间。为了分sdshdr是哪一种类型,它在每一种 阅读全文
posted @ 2017-10-28 23:16 flypighh 阅读(527) 评论(1) 推荐(0) 编辑
摘要: redis是基于事件驱动的,相应的实现都在ae.c当中。 其实个人对于“事件驱动”的理解不是那么明显,只能说从它的实现上来看稍微有一些感觉: 先由外部模块注册感兴趣的事件以及callback,在poll返回时判断是否有相应模块感兴趣的事件,如果有的话就调用注册的callback ae.c里面使用如下 阅读全文
posted @ 2017-10-28 23:14 flypighh 阅读(900) 评论(0) 推荐(0) 编辑