一,redis内存管理介绍二,redis内存管理源码分析redis封装是为了屏蔽底层平台的差异,同时方便自己实现相关的函数,我们可以通过src/zmalloc.h 文件中的相关宏定义来分析redis是怎么实现底层平台差异的屏蔽的,zmalloc.h 中相关宏声明如下:#if defined(USE_TCMALLOC) #define ZMALLOC_LIB ("tcmalloc-" __xstr(
文章目录Scrapy-Redis的使用安装源码分析picklecompat.py文件queue.py文件Base类FifoQueue类LifoQueue类PriorityQueue类dupefilter.py文件scheduler.py文件总结Scrapy-Redis的配置核心配置Redis连接配置第一种方式第二种方式调度队列配置持久化配置重爬Pipline配置 Scrapy-Redis的使用G
转载 2023-09-19 00:29:55
25阅读
一、 核心数据结构 ConnectionType, ConnectionType定义了网络连接的接口,包含read、write等,具体定义如下。 typedef struct ConnectionType { void (*ae_handler)(struct aeEventLoop *el, in ...
转载 2021-09-22 23:37:00
104阅读
2评论
引言redis网络部分是一个单线程,事件驱动,基于reactor模式实现的网络框架.redis把所有的事件分为两类,文件事件与时间事件.文件事件其实就是套接字事件,也就是服务
原创 2022-07-08 09:39:58
104阅读
从github上下载redis的源代码,地址为 https://github.com/antirez/redis.gitmac 事先安装了CLion,导入redis源码工程如下,然后切换到redis 6.0 第2章 简单动态字符串实现类为sds.h 和 sds.c struct sds { int len; // buf中已占用字节数
转载 2023-07-08 13:26:43
46阅读
一、set方法1,先去调用底层的connect方法,去进行一个socket连接 connect 从源码中可以看到是通过CP协议与redis建立socket连接,此时可以将redis理解为一个serverSocket。 2.手写模拟一个redispublic class ServerSocketRedis { public static void main(S
转载 2023-05-30 09:14:33
117阅读
一、redis源码编译redis可以直接在官网下载(本文使用版本 3.0.7):https://redis.io/download安装:$ tar xzf redis-3.0.7.tar.gz $ cd redis-3.0.7 $ makemake执行以后主要编译产物在src/redis-server src/redis-cli如果想把redis-server直接install到可执行目录/usr
转载 2023-08-25 22:25:25
41阅读
Redis网络模型是基于I/O多路复用程序来实现的。源码中包含四种多路复用函数库epoll、select、evport、kqueue。在程序编译时会根据系统自动选择这四种库其中之一。下面以epoll为例,来分析Redis的I/O模块的源码。epoll系统调用方法Redis网络事件处理模块的代码都是围绕epoll那三个系统方法来写的。先把这三个方法弄清楚,后面就不难了。epfd = epoll_c
Redis 源码阅读篇一、Redis源码目录结构首先,我们来了解下 Redis 的目录结构。 为什么要从目录结构开始了解呢?其实,这是我自己阅读代码的一个小诀窍:在学习一个 大型系统软件的代码时,要想快速地对代码有个初步认知,了解系统源码的整体目录结构就是一个行之有效的方法。这是因为,系统开发者通常会把完成同一或相近功能的代码文 件,按目录结构来组织。能划归到同一个目录下的代码文件,一般都是具有相
转载 2023-07-10 22:18:19
37阅读
Redis 3.0 源码注释 本项目是注释版的 Redis 3.0 源码, 原始代码来自: https://github.com/antirez/redis 。这份注释是我在创作新版《Redis 设计与实现》期间, 为了了解 Redis 的内部实现而制作的, 所有在书中有介绍的内容, 在源码中都进行了相应的注释。在注释的过程中, 除了少量空格和空行方面的调整外, 没有对原
本文将从以下几个方面介绍前言字典结构图字典结构定义字典操作源码分析命令操作字典 前言在上一篇文章Redis 数据结构-字符串源码分析分析了字符串的一个实现过程,现在来看下另外一种数据结构字典的实现原理,字典这种数据结构并不是 Redis 那几种基本数据结构,但是 hash , sets 和 sorted sets 这几种数据结构在底层都是使用字典来实现的(并不仅仅是字典
文章目录简介结构定义和详细介绍zskiplist 结构zskiplistnode结构操作API创建随机算法插入获取节点排名释放删除 参考文章 图解比较详细: 图解redis跳跃表 简介跳跃表是Redis zset的底层实现之一,zset在member较多时会采用跳跃表作为底层实现,它在添加、删除、查找节点上都拥有与红黑树相当的性能,它其实说白了就是一种特殊的链表,链表的每个节点存了不同的“
当集群模式中需要扩缩容时,需要向集群中添加/删除节点,本节就来介绍下这个过程。添加节点当把节点A加入集群时,需要运维工具redis-cli向集群中任意节点发送Cluster meet < ip > < port > 命令:void clusterCommand(client *c) { ... if (!strcasecmp(c->argv[1]->ptr,
转载 2023-07-04 16:52:12
89阅读
上一篇解读了一下SDS,本来觉得完了,但之后想想感觉少点什么,现在我们从使用的角度去梳理一下,大家想想对于字符串, 我们经常使用的有哪几个方法呢?这些方法又是怎么实现的?在研究上面的几个方法之前我们先来了解一下redisObject对象,源码redis.h中,以下是源码:typedef struct redisObject { unsigned type:4; //对象类型,string
转载 2023-06-07 19:16:26
105阅读
近来在研读redis3.2.9的源码,虽然网上已有许多redis源码解读文章,但大都不成系统,且纸上学来终觉浅,遂有该系列博文。部分知识点参照了黄建宏的《Redis设计与实现》。定义在自定义的基础数据结构的基础上,redis 通过 redisObject 封装整合成了对外暴露的5中数据结构。 首先看看 redisObject 的定义: #define LRU_BITS 24 typedef s
转载 2023-08-15 18:31:31
57阅读
redis源码编译安装 首先我们下载软件包到指定的目录下 tar -zxvf redis-2.8.19.tar.gz cd redis-2.8.19 make make PREFIX=/usr/local/redis install mkdir /usr/local/redis/etc/ cp redis.conf /usr/local/redis/etc/ cd /usr
转载 2023-06-29 14:57:18
78阅读
三、JedisCluster模块源码解析1、JedisCluster类结构由于Jedis本身不是线程安全的,所以选择使用对象池JedisPool来保证线程安全在JedisClusterInfoCache中,保存了节点和槽位的一一对应关系,为每个节点建立一个对象JedisPool,并保存在map中。这个类主要用于保存集群的配置信息2、JedisCluster的初始化public class Jedi
redis源码分析2---结构体---链表  因为redis包含大量的键值对,redis中列表键的底层实现之一就是链表;当一个链表键包含了数量比较多的元素,又或者列表中包含的元素都是比较长的字符串时,redis就会使用链表作为底层实现;     另外链表做外数据结构中最常使用的结构,如何高效的实现和值得我们学习;我之前在项目中大量使用了链表但是感觉
转载 2023-05-31 20:29:02
66阅读
文章目录简介内部实现压缩链表跳表跳表节点查询过程跳表节点层数设置为什么用跳表而不用平衡树? 简介Zset 类型(有序集合类型)相比于 Set 类型多了一个排序属性 score(分值),对于有序集合 ZSet 来说,每个存储元素相当于有两个值组成的,一个是有序结合的元素值,一个是排序值。有序集合保留了集合不能有重复成员的特性(分值可以重复),但不同的是,有序集合中的元素可以排序。内部实现Hash
转载 2023-05-25 13:02:00
170阅读
一、Redis的一些特点非关系型的键值对数据库,底层是hashtable,可以根据键以0(1)的时间复杂度取出或插入关联值Redis的数据基于内存存储的键值对中键的类型可以是字符串,整型,浮点型等,且键是唯一的键值对中的值类型可以是string, hash, list, set, sorted_set等Redis内置了复制,磁盘持久化,LUA脚本, 事务,SSL, ACLS,客户端缓存,客户端代理
  • 1
  • 2
  • 3
  • 4
  • 5