【redis源码分析系列读者声明】教程文章相关的互联网学习教程文章

redis源码分析(一)内存管理

一,redis内存管理介绍 redis是一个基于内存的key-value的数据库,其内存管理是非常重要的,为了屏蔽不同平台之间的差异,以及统计内存占用量等,redis对内存分配函数进行了一层封装,程序中统一使用zmalloc,zfree一系列函数,其对应的源码在src/zmalloc.h一,redis内存管理介绍 redis是一个基于内存的key-value的数据库,其内存管理是非常重要的,为了屏蔽不同平台之间的差异,以及统计内存占用量等,redis对内存分配函数进行了一...

10年大厂程序员是如何高效学习使用redis的丨redis源码分析丨redis存储原理【图】

10年大厂程序员是怎么学习使用redis的 1. redis存储原理分析 2. redis源码学习分享 3. redis跳表和B+树详细对比分析 视频讲解如下,点击观看:<iframe allowfullscreen="true" data-mediaembed="bilibili" id="oyTznZ9d-1617363967000" src="https://player.bilibili.com/player.html?aid=757418255"></iframe> 10年大厂程序员是如何高效学习使用redis的丨redis源码分析丨redis存储原理丨 分布式丨中间件丨B+树丨后端开发丨Linux服...

Redis——深入得学习与源码分析:布隆过滤器【代码】【图】

摘要 上一节我们学会了使用 HyperLogLog 数据结构来进行估数,它非常有价值,可以解决很多精确度不高的统计需求。但是如果我们想知道某一个值是不是已经在 HyperLogLog 结构里面了,它就无能为力了,它只提供了 pfadd 和 pfcount 方法,没有提供 pfcontains 这种方法。讲个使用场景,比如我们在使用新闻客户端看新闻时,它会给我们不停地推荐新的内容,它每次推荐时要去重,去掉那些已经看过的内容。问题来了,新闻客户端推荐系统如...

源码分析--redis的sentinel在master宕机时是如何选择新的master的【图】

redis通过sentinel, 在master宕机时,会迅速选择从库中的一个作为新的主库,然后其他的从库跟这个新主库重新建立主从关系。亲是否跟作者一样好奇--------假如一个redis主库有多个从库,最终会选择哪个从库作为新主库? 是否存在随机的情况? 您会给出什么样的答案。上面图片的白色部分,是完整的主从切换日志。关于选择新主库,日志中只有如下所示的轻描淡写地一行。“+selected-slave slave 197.3.XXX.44:6379 197.3.XXX.44 63...

redis源码分析笔记之客户端【代码】

结构定义 源码: /* server.h 5.0.8 *With multiplexing we need to take per-client state.* Clients are taken in a linked list. */ typedef struct client {uint64_t id; /* Client incremental unique ID. */int fd; /* Client socket. */redisDb *db; /* Pointer to currently SELECTed DB. */robj *name; /* As set by CLIENT SETNAME. */sds querybuf; /* Bu...

redis源码分析——内存布局【代码】【图】

1. 介绍 众所周知,redis是一个开源、短小、高效的key-value存储系统,相对于memcached,redis能够支持更加丰富的数据结构,包括: 字符串(string)哈希表(map)列表(list)集合(set)有序集(zset) 主流的key-value存储系统,都是在系统内部维护一个hash表,因为对hash表的操作时间复杂度为O(1)。如果数据增加以后,导致冲突严重,时间复杂度增加,则可以对hash表进行rehash,以此来保证操作的常量时间复杂度。 那么,对于这...

redis源码分析之十二数据持久化存储【代码】

一、数据持久化 redis做为一种内存型数据库,做持久化,个人感觉略有鸡肋的意思。似乎有一种,别人有,自己不有也不行的感觉。以目前Redis主流的应用方式,如果仔细分析,基本上都是在内存中即可完成,对持久化没要求或者说不大。再举一个反例,如果内存中有几百G甚至更多的数据,真要是整体当机,恢复的时间基本就是灾难。 目前基本应用仍然是以关系型数据库或者其它数据库(如Hadoop,Mysql等)为持久化的方式,Redis只是发挥其内...

Redis5设计与源码分析 (第8章 Stream)【图】

Redis在最新的5.0.0版本中也加入了消息队列的功能,这就是Stream。 8.1 Stream简介图8-1 Redis Stream结构图 命令: xadd mystream1 * name hb age 20 mystream1为Stream的名称; *代表由Redis自行生成消息ID; name、age为该消息的field; hb、20则为对应的field的值。 每个消息都由以下两部分组成。 每个消息有唯一的消息ID,消息ID严格递增。 消息内容由多个field-value对组成。 当消费者不归属于任何消费组时,该消费者可以消...

Redis之quicklist源码分析【代码】【图】

一、quicklist简介 Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。 一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。 其底层实现所依赖的内部数据结构就是quicklist,主要特点有: 1. list是一个双向链表。 2. 在list的两端追加和删除数据极为方便,时间复杂度为O(1)。 3. list也支持在任意中间位置的存取操作,时间复杂度为O(N)。 在看...

Redis Sentinel源码分析(二)【代码】

原文链接:https://my.oschina.net/zipu888/blog/549570接Redis Sentinel源码分析(一)sentinelTimer函数周期性运行,第一次在服务启动后1ms执行,后续执行周期1000/server.hz(sentinelTimer函数会修改server.hz的值) sentinelTimer内部包含sentinel模式需要定期执行的操作,包括check master、slave、sentinel的状态,并根据配置的条件判断是否需要fail over。 void sentinelTimer(void) {//check是否需要进入TITL模式sentine...

redis源码分析之anet.c【代码】

#include "fmacros.h"#include <sys/types.h> #include <sys/socket.h> #include <sys/stat.h> #include <sys/un.h> #include <sys/time.h> #include <netinet/in.h> #include <netinet/tcp.h> #include <arpa/inet.h> #include <unistd.h> #include <fcntl.h> #include <string.h> #include <netdb.h> #include <errno.h> #include <stdarg.h> #include <stdio.h>#include "anet.h"static void anetSetError(char *err, const cha...

redis源码分析之networking.c【代码】

#include "server.h" #include "atomicvar.h" #include <sys/uio.h> #include <math.h> #include <ctype.h>static void setProtocolError(const char *errstr, client *c, int pos);/* Return the size consumed from the allocator, for the specified SDS string,* including internal fragmentation. This function is used in order to compute* the client output buffer size. */ size_t sdsZmallocSize(sds s) {void *sh = ...

Redis 3.0源码分析-客户端【代码】【图】

Redis服务器状态结构的clients属性是一个链表,这个链表保存了所有与服务器连接的客户端的状态结构,对客户端执行批量操作,或者查找某个指定的客户端,都可以通过遍历clients链表来完成。/* With multiplexing we need to take per-client state.* Clients are taken in a liked list.** 因为 I/O 复用的缘故,需要为每个客户端维持一个状态。** 多个客户端状态被服务器用链表连接起来。*/ typedef struct redisClient {// 套接字...

Redis源码分析-底层数据结构盘点【图】

因为项目中经常使用到Redis,所以楼主一直以来对redis的源码很感兴趣。前段时间忽然心血来潮,抽了点时间将Redis的源码过了一遍,主要包括多路复用和常用数据结构的底层实现部分,看的是C语言版本的Redis(虽然楼主是JAVA程序猿)。 应该说收益颇丰,尤其是redis对各种数据结构的实现,它的每个数据结构为各种不同的应用场景,做了特定的优化,譬如数据量大的时候结构怎么定义、数据量小的时候结构怎么定义、由于redis是单线程,在...

redis源码分析系列读者声明

本分析是基于redis4.0.2做的源代码分析; 由于博主工作中是用的mac,所以用的mac clion来阅读c代码, 原生redis代码并不支持clion,博主是fork了一个github上与clion集成的一个版本; 近期准备开redis github的一个注释版,虽然有好多大神已经有好多redis的github的注释版,但是毕竟不如自己亲手去做一次; do better,live better