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

Redis源码分析(二十七)--- rio系统I/O的封装

I/O操作对于每个系统来说都是必不可少的一部分。而且I/O操作的好坏,在一定程度上也会影响着系统的效率问题。今天我学习了一下在Redis中的I/O是怎么处理的,同样的,Redis在他自己的系统中,也封装了一个I/O层。简称RIO。得先看看RIO中有什么东西喽:struct _rio {/* Backend functions.* Since this functions do not tolerate short writes or reads the return* value is simplified to: zero on error, non zero on complete su...

Redis5设计与源码分析读后感(二)简单动态字符串SDS【图】

一、引言  学习之前先了解几个概念:  SDS定义:简单动态字符串,Redis的基本数据结构之一,用于储存字符串和整型数据。二进制安全:C语言中用"\0"表示字符串结束,如果字符串本身就有这个字符,那么此字符串会被阶段,此时为非二进制安全;若通过某种机制保证读写字符串时不损害其内容,则称为二进制安全。字节对齐:字节按照一定规则在空间上排列。(不按规则排列有些架构CPU进行访问时会引起错误或者影响读取效率)。PS:如...

分布式缓存技术之Redis_Redis集群连接及底层源码分析【代码】

目录 1. Jedis 单点连接 2. Jedis 基于sentinel连接 基本使用 源码分析本次源码分析基于: jedis-3.0.1 1. Jedis 单点连接 ? 当是单点服务时,Java 连接Redis的客户端:Jedis jedis = null;try {jedis = new Jedis("192.168.237.130", 6379);jedis.hset("hashzz", "k1", "v1");} catch (Exception e) {System.out.println(e);e.printStackTrace();} finally {if (null != jedis) {jedis.disconnect();}} ?或者JedisPool pool = null...

redis源码分析之十八Lua脚本【代码】【图】

一、Lua和Redis 这篇其实和Redis本身的源码关系不是太大了,主要是看一下对REDIS的支持。Lua可能好多人都没有听说过,但是如果搞过网游的人,估计都用过,做为一种胶水语言,Lua对C/C++的支持非常友好,这是一般的脚本语言都没有做到的。它很小很轻量,所以非常容易与其它程序集成。在魔兽和仙剑等游戏中都广泛使用。 Lua的缺点也很明显,对开发支持的力度不大,功能也少,功能少,就意味着如果搞复杂或者大的东西需要自己实现轮子...

Redis学习之ziplist压缩列表源码分析【代码】

一.压缩列表ziplist在redis中的应用1.做列表键当一个列表键只包含少量列表项,并且每个列表项要么是小整数,要么是短字符串,那么redis会使用压缩列表作为列表键的底层实现2.哈希键当一个哈希键只包含少量的键值对,并且每个键值对的键和值要么是小整数,要么是短字符串,那么redis会使用压缩列表作为哈希键的底层实现二.压缩列表的定义:压缩列表ziplist是redis为了节约内存而开发的,是由一些了特殊编码的连续内存块组成的顺序数...

redis字符串源码分析sds【代码】【图】

前言 分析的为redis现在的最新版 6.2.3 源码链接: sds.h: https://github.com/redis/redis/blob/unstable/src/sds.h sds.c: https://github.com/redis/redis/blob/unstable/src/sds.c sds结构体的定义 // sds的定义 typedef char *sds;/* Note: sdshdr5 is never used, we just access the flags byte directly.* However is here to document the layout of type 5 SDS strings. */ // 不会被用到 struct __attribute__ ((__pack...

redis源码分析(三)--rdb持久化【代码】

Defines related to the dump file format. To store 32 bits lengths for short* keys requires a lot of space, so we check the most significant 2 bits of* the first byte to interpreter the length:** 00|XXXXXX => if the two MSB are 00 the len is the 6 bits of this byte* 01|XXXXXX XXXXXXXX => 01, the len is 14 byes, 6 bits + 8 bits of next byte* 10|000000 [32 bit integer] => A full 32 bit len in net by...

Redis源码分析:dict.c和dict.h【图】

哈希表是 redis 的核心结构之一,在 redis 的源码中, dict.c 和 dict.h 就定义了 redis 所使用的哈希结构,在这篇文章中,我们将 简介 哈希表是 redis 的核心结构之一,在 redis 的源码中, dict.c 和 dict.h 就定义了 redis 所使用的哈希结构,在这篇文章中,我们将对 dict.c 和 dict.h 进行注解和分析,籍此加深对 redis 的理解。 因为 dict.c 中使用的 separate chaining 哈希表实现可以在任何一本算法书上找到,因此,在本文中...

Redis源码分析(二十八)---object创建和释放redisObject对象

今天的学习效率比较高,把Rio分析完了,又顺便学习了其中的RedisObject的文件,只要讲的就是RedisObject的一些转换和创建。里面的大多数方法都是非常类似的。列出里面长长的API列表: /* ------------ API --------------------- */robj *createObject(int ty今天的学习效率比较高,把Rio分析完了,又顺便学习了其中的RedisObject的文件,只要讲的就是RedisObject的一些转换和创建。里面的大多数方法都是非常类似的。列出里面长长的...

Redis源码分析(十七)---multi事务操作

redis作为一非关系型数据库,竟然同样拥有与RDBMS的事务操作,不免让我觉得比较惊讶。在redis就专门有文件就是执行事务的相关操作的。也可以让我们领略一下,在Redis的代码中是如何实现事务操作。首先亮出mulic.c下面的一些API。 /* =======================redis作为一非关系型数据库,竟然同样拥有与RDBMS的事务操作,不免让我觉得比较惊讶。在redis就专门有文件就是执行事务的相关操作的。也可以让我们领略一下,在Redis的代码中...

Redis源码分析(十三)---redis-benchmark性能测试

今天讲的这个是用来给redis数据库做性能测试的,说到性能测试,感觉这必然是高大上的操作了,redis性能测试,测的到底是哪方面的性能,如何测试,通过什么指标反映此次测试的性能好坏呢,下面我通过源码给大家做一一解答。 redis做的性能测试时对立面的基本今天讲的这个是用来给redis数据库做性能测试的,说到性能测试,感觉这必然是高大上的操作了,redis性能测试,测的到底是哪方面的性能,如何测试,通过什么指标反映此次测试的...

Redis源码分析(八)---t_hash哈希转换

在上次的zipmap分析完之后,其实关于redis源代码结构体部分的内容其实已经全部结束了,因为下面还有几个和结构体相关的操作类,就页把他们归并到struct包下了。这类的文件有:t_hash.c,z_list,z_set.c,t_string.c,t_zset.c,这些文件的功能其实都差不多,就是在上次的zipmap分析完之后,其实关于redis源代码结构体部分的内容其实已经全部结束了,因为下面还有几个和结构体相关的操作类,就页把他们归并到struct包下了。这类的文件有...

Redis源码分析(六)---ziplist压缩列表

ziplist和之前我解析过的adlist列表名字看上去的很像,但是作用却完全不同。之前的adlist主要针对的是普通的数据链表操作。而今天的ziplist指的是压缩链表,为什么叫压缩链表呢,因为链表中我们一般常用pre,next来指明当前的结点的前一个指针或当前的结点的ziplist和之前我解析过的adlist列表名字看上去的很像,但是作用却完全不同。之前的adlist主要针对的是普通的数据链表操作。而今天的ziplist指的是压缩链表,为什么叫压缩链表...

Redis源码分析(七)---zipmap压缩图

如果有看过之前我分析的ziplist压缩列表的分析的话,理解这个我觉得不是什么特别的难题。ziplist压缩列表和zipmap都采用了动态分配字节的做法表示长度,比如通过固定的字节表示节省了不少的空间。同样带来的问题就是复杂的指针移动,和字符位置移动。但总的如果有看过之前我分析的ziplist压缩列表的分析的话,理解这个我觉得不是什么特别的难题。ziplist压缩列表和zipmap都采用了动态分配字节的做法表示长度,比如通过固定的字节表...

Redis源码分析(五)---sparkline微线图

sparkline这个单词,我第一次看的时候,也不知道这什么意思啊,以前根本没听过啊,但是这真真实实的出现在了redis的代码中了,刚刚开始以为这也是属于普通的队列嘛,就把他分在了struct包里了。好来分析完了,与原本我所想的差太大了。sparkline英文中的意思sparkline这个单词,我第一次看的时候,也不知道这什么意思啊,以前根本没听过啊,但是这真真实实的出现在了redis的代码中了,刚刚开始以为这也是属于普通的队列嘛,就把他分...