【Redis源码学习】教程文章相关的互联网学习教程文章

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

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

beego Session redis源码解读【代码】

在文章beego Session redis存储以及是否阻塞 我们说到session 是无阻塞的,session的接口对用户来说是一个字典(C# diction, Go是map), 存储所有的ssion也是一个字典(类似于C# Dictionary<string【sessionid 用于区分用户】,Dictionary<string【用户设置的key】,object>> ) 首先我们来看看redis session (ledis_session.go)的源码吧,和C#相同, 有一个SessionStore负责存储和Provider;package redisimport ("net/http""st...

[redis 源码走读] sentinel 哨兵 - 故障转移【代码】【图】

接上一章投票选举 《[redis 源码走读] sentinel 哨兵 - 选举投票》。前面几章已经讲了:各个角色的通信,主客观下线,投票选举,当 sentinel 的 leader 被选出来后,由它来完成 redis 实例的角色转换。1. 故障转移 故障转移有很多个环节组成,集群中每个 sentinel 都有机会执行,但是只有在选举过程中,赢得选票的人,才能完整完成整个故障转移流程。 1.1. 流程 sentinel 的故障转移流程有几个环节组成,主要可以看它源码定义的几个...

redis源码学习之slowlog【代码】【图】

目录背景环境说明redis执行命令流程记录slowlog源码分析制造一条slowlogslowlog分析1.slowlog如何开启2.slowlog数量限制3.slowlog中的耗时的含义4.slowlog中时间戳的含义自己的一些思考 背景 redis虽说是一个基于内存的KV数据库,以高性能著称,但是依然存在一些耗时比较高的命令,比如keys *,lrem等,更有甚者会在lua中写一些比较耗时的操作,比如大循环里面执行命令等,鉴于此,本篇将从源码角度分析redis慢日志的记录原理,并给...

Redis源码简要分析【图】

转载请注明来源:https://www.cnblogs.com/hookjc/把所有服务端文件列出来,并且标示出其作用:adlist.c //双向链表ae.c //事件驱动ae_epoll.c //epoll接口, linux用ae_kqueue.c //kqueue接口, freebsd用ae_select.c //select接口, windows用anet.c //网络处理aof.c //处理AOF文件config.c //配置文件解析db.c //DB处理dict.c //hash表intset.c //转换为数字类型数据multi.c //事务,多条命令一起打包处理networking.c //读取、解析...

redis 源码阅读杂记【代码】

Miscrehash 是分 db 的 redis db 中的 字典什么情况下会自动 rehash redis 中的 key 淘汰, 定时被动淘汰(有2 种模式)。 另外则是每次访问到 key 都会检查一下 key 是否过期则删除(也能减少部分 key) key 的读写分多套接口,基本上读写的功能函数是分离的。这是因为 read 要统计命中效率的。也是具体实现细节吧 expires 的 key 居然放在另外的 一个 dict 中, 想象也是合理。不然就要全量遍历 dict 中的所有 key。 不过 expire...

redis —— 源码安装【代码】

一、下载redis源码,此处以redis 5.0.7为例wget http://download.redis.io/releases/redis-5.0.7.tar.gz二、解压tar -xf redis-5.0.7.tar.gz三、编译cd redis-5.0.7/ make四、启动cd src/ ./redis-server 五、客户端连接 同目录下./redis-cli 参考链接:https://redis.io/download 其它版本链接:http://download.redis.io/releases/

redis 源码系列(17):分身术 --- replication【代码】

单点服务在生产环境是绝对无法接受的,但是数据库服务,要实现多节点或者说分布式部署,面临的问题比 stateless 服务要多的多。数据的同步方式、一致性和可用性的妥协诸多限制,必须都加以考虑。 今天我们来学习一下 redis 主从同步相关内容,本节内容是 redis 实现高可用、数据安全、数据分区的基石。如果在节点之间没有一个可靠的数据同步方法,那么上述的一切都成为空中阁楼。 主节点在任意时刻只有一个,从节点可以有若干个。主...

Redis源码剖析和注释(十四)---- Redis 数据库及相关命令实现(db)【代码】【图】

Redis 数据库及相关命令实现数据库管理命令 数据库管理的命令如下表格所示:redis keys命令详解数据库的实现 2.1数据库的结构typedef struct redisDb {// 键值对字典,保存数据库中所有的键值对dict *dict; /* The keyspace for this DB */// 过期字典,保存着设置过期的键和键的过期时间dict *expires; /* Timeout of keys with a timeout set */// 保存着 所有造成客户端阻塞的键和被阻塞的客户端d...

Redis源码阅读一:简单动态字符串SDS【代码】

源码阅读基于Redis4.0.9 SDS介绍 redis 127.0.0.1:6379> SET dbname redis OK redis 127.0.0.1:6379> GET dbname "redis" 从上面的例子可以看到,key为dbname的值是一个字符串“redis” Redis源码是用c写成,但并没有使用c的字符串。c的字符串有以下缺点:没有储存字符串长度的变量,获取长度只能靠遍历字符串 扩容麻烦。没有相应保护,容易造成缓冲区溢出 更新字符串需要重新分配内存addr value0x0 s0x1 t0x2 r0x3 10x4 \00x50x60...

redis源码解析(十五)快速链表API功能函数解析【代码】

一. 前言 ??本文继前文基础上继续分析剩余的快速链表函数源码。 二. 源码分析 /* Replace quicklist entry at offset 'index' by 'data' with length 'sz'.** Returns 1 if replace happened.* Returns 0 if replace failed and no changes happened. */ int quicklistReplaceAtIndex(quicklist *quicklist, long index, void *data,int sz) {quicklistEntry entry;if (likely(quicklistIndex(quicklist, index, &entry))) {/* qui...

Redis源码剖析和注释(八)--- 对象系统(redisObject)

原文链接:https://blog.csdn.net/men_wen/article/details/70257207Redis源码剖析和注释(八)--- 对象系统(redisObject) 本文链接:https://blog.csdn.net/men_wen/article/details/70257207 Redis 对象系统 1. 介绍 redis中基于双端链表、简单动态字符串(sds)、字典、跳跃表、整数集合、压缩列表、快速列表等等数据结构实现了一个对象系统,并且实现了5种不同的对象,每种对象都使用了至少一种前面的数据结构,优化对象在不同...

02. Redis 源码安装【代码】

Redis 官方并不提供window 的安装包, 只提供Linux 环境下的源码安装包. Redis 采用c语言编写, 因此需要安装gcc 编译器. 1. 安装Redis 1.1 下载redis源码包 当前redis最新版本为5.04, 官方下载地址: https://redis.io 1.2 解压 笔者习惯于将redis源码包放于/usr/local/src 目录 $ tar -zxf redis-5.0.4.tar.gz -C /usr/local/src/1.3 编译 进入源码目录/usr/local/src, 执行make命令 .make 命令会编译源文件,并生成二进制文件。新...

Redis源码剖析--基数统计hyperloglog【代码】

Redis源码剖析–基数统计 基数统计 算法思路伯努利过程 基数统计hyperloglog实现数据结构 添加元素 计算基数 合并hyperloglog键hyperloglog小结 Update 2016-12-9Redis中hyperloglog是用来做基数统计的,其优点是:在输入元素的数量或者体积非常非常大的时候,计算基数所需的空间总是固定的,并且是很小的。在Redis里面,每个Hyperloglog键只需要12Kb的大小就能计算接近2^64个不同元素的基数,但是hyperloglog只会根据输入元素来计...

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...