redis source code
redis source code reading log
打酱油呀
闲来无聊,学习分享记录一下而已~~~~
展开
-
Redis Source Code Read Log( 16 Redis 主从同步))
Replica 设置第一步replicationSetMaster1. 自身已经是 replica,该命令 change master,先断开与先前 master 的关系2. 当前自身所有的 blocked client 全部 free3. 当前节点如果有从节点,那么所有从节点全部断开4. 之前处理中的一些主从“hand shake”任务,暂且取消,执行新的主从“hand ...原创 2020-04-24 19:50:38 · 180 阅读 · 0 评论 -
Redis Source Code Read Log( 15 zset & pubsub & pipe))
Part 1 zsetRedis zset 是一个 sorted set 有序集合,其中的每一个元素都会关联一个 double 类型的 score,形成一个key-value pair。既然是集合,那个 key 是唯一的,但是score是可以重复的,但是score的类型必须是double,而key值的类型,必须是string。命令ZADD zset_name score member...原创 2020-04-22 18:24:58 · 166 阅读 · 0 评论 -
Redis Source Code Read Log( 14 AOF 详解(NOTE:此文较长))
Part 1: 相关配置介绍1. 总开关appendonly nono: 表示不开启 aof 功能yes: 表示开启 aof 功能2. 输出文件appendfilename “appendonly.aof”aof 输出的文件名3. 模式appendfsync everysec# appendfsync always# appendfsync n...原创 2020-04-11 05:18:42 · 305 阅读 · 0 评论 -
Redis Source Code Read Log( 13 rdb)
Part 1: rdb 三种方式1. save block main process2. bgsave [schedule] fork rdb child process3. background save by config fork rdb child process# save “”save 900 1 > 1 keys after 9...原创 2020-04-08 00:43:18 · 160 阅读 · 0 评论 -
Redis Source Code Read Log( 12 robj & sds)
Part 1: redisObject robjdefinitions针对原字节流,Redis内部根据不同场景,结合 sds 进行不同的 object 构造。而 object 模块就是“工厂模式”下,二进制字节流的消费者,以及 Redis server 中对象 redisObject(robj) 的生产者。type 域robj 内部元素的类型。这个类型的定义就是实际...原创 2020-04-06 20:37:56 · 171 阅读 · 0 评论 -
Redis Source Code Read Log( 11 list 之 block)
BLOCK 命令的业务逻辑:Redis 5.0.x 支持 三种类型的 block 操作1. list Blocked pop2. zset Blocked pop3. stream Blocked xread(5.0 新增)list 与 zset blocked pop 操作,逻辑基本一致。1. 客户端发送 block pop 命令2. 需要 pop 的 target ...原创 2020-04-06 14:14:21 · 140 阅读 · 0 评论 -
Redis Source Code Read Log( 10 data type: list 之 quicklist )
Part 01 quicklist 数据结构示意push 操作示意图quicklistEntryquicklistEntry: 内部记录一些指针以及状态,遍历quicklist时,记录同步更新记录遍历的准确位置。另,其中另有三个域,如下:longval:会直接记录解析的ziplist中存储的整型数。value 以及 sz 字段: 同时记录ziplist中存储...原创 2020-04-05 02:58:29 · 107 阅读 · 0 评论 -
Redis Source Code Read Log( 9 set )
Redis内部提供了set数据类型介绍set 数据类型是一个集合(没有排序,不重复),可以对 set 类型的数据进行添加、删除、判断是否存在等操作set 集合不允许数据重复,如果添加的数据在 set 中已经存在,将只保留一份。set 类型提供了多个 set 之间的聚合运算,如求交集、并集、补集,这些操作在 redis 内部完成,效率很高。set 对数据类型要求是string类型...原创 2020-04-02 23:53:02 · 152 阅读 · 0 评论 -
Redis Source Code Read Log( 8 hash )
Part 1: Redis hash 内部实现方式的选择与切换Redis在redis.conf中提供了hash内部数据结构切换的条件如下:# Hashes are encoded using a memory efficient data structure when they have a# small number of entries, and the biggest entr...原创 2020-04-02 03:41:51 · 93 阅读 · 0 评论 -
Redis Source Code Read Log( 7 hash 之 ziplist)
Redis hash 命令hash的命令,大多数都是针对 hash 中的field以及value pair进行的操作。其中 DEL 会直接删除掉整个hash数据结构。另外,field被清空了的 hash系统也会自动清除掉数据库中的hash key值。1. hash key 值只支持 string 类型2. hash key 中 field 只支持 string 类型3. h...原创 2020-04-02 00:42:23 · 91 阅读 · 0 评论 -
Redis Source Code Read Log( 6. dict details)
介绍dict 内部实现机制,具体什么是hashmap,这里不介绍。Redis 内部的 dict 桶采用的是向量,然后拉链采用的是 单链表。关键是桶个数bucket_size:size 必须是2的次方数。index 获取方式不是取模,而是取低位即按位与 sizemask(size - 1) 之后,作为 bucket_index。hash 算法为 SipHash, 底层实际都是对 stri...原创 2020-03-31 01:15:55 · 114 阅读 · 0 评论 -
Redis Source Code Read Log( 5. 核心数据结构)
Redis 的核心功能数据结构主要有如下几个:redisServerredisDbredisCommandredisObject: robjdictclient1. redisServer针对核心的功能, redisServer 主要的数据结构。第一个是 el, aeEventLoop的引用。架构层面,需要将eventloop进行存储,后续注册fileEve...原创 2020-03-30 16:50:56 · 329 阅读 · 0 评论 -
Redis Source Code Read Log( 4. fork issuse)
Part 1: 标准I/O的缓冲作用标准I/O带缓冲,那么作用是什么呢?简单而言,就是为了提高效率,防止反复系统调用,导致的性能问题。#include <stdio.h>#include <stdlib.h>#include <string.h>#include <time.h>#include <unistd.h>#...原创 2020-03-29 16:52:57 · 105 阅读 · 0 评论 -
Redis Source Code Read Log( 3. aeEventLoop Arch EPOLL LT mode arch)
Part 1: Basic StructureaeTimeEvent双链表结构aeFileEvent & aeFiredEventaeApiStateaeEventLoopPart 2: eventLoop ArchaeMainmain data flow:1.当Redis Sever启动之后,监听socket,开始accept客...原创 2020-03-28 15:59:09 · 166 阅读 · 0 评论 -
Redis Source Code Read Log (2. 父子进程继承了什么 参考《Unix环境高级编程第三版》)
Part 1: fork 介绍#include <unistd.h>pid_t fork(void);由 fork 创建的子进程,该函数被调用一次,但是会返回两个返回值。第一个返回值:子进程的pid。返回给父进程,即当前调用fork的进程。第二个返回值:0,返回给子进程。即新产生的进程。为什么需要将子进程的pid返回给父进程?因为:一个父进程可能有很多子进程...原创 2020-03-27 22:47:48 · 113 阅读 · 0 评论 -
Redis Source Code Read Log( 1. bio, Backgound I/O)
Redis 启动后,main thread 中启动三个bio线程,分别执行三种任务:#define BIO_CLOSE_FILE 0 /* Deferred close(2) syscall. */#define BIO_AOF_FSYNC 1 /* Deferred AOF fsync. */#define BIO_LAZY_FREE 2 /* Deferred o...原创 2020-03-20 06:38:54 · 191 阅读 · 0 评论