![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
redis
TuxedoLinux
这个作者很懒,什么都没留下…
展开
-
zmalloc
redis的内存分配主要就是对malloc和free进行了一层简单的封装。具体的实现在zmalloc.h和zmalloc.c中。本文将对redis的内存管理相关几个比较重要的函数做逐一的介绍参考:http://blog.csdn.net/guodongxiaren/article/details/44783767 http://www.voidcn.com/article/p-kxxvjy...转载 2019-08-30 10:44:13 · 579 阅读 · 0 评论 -
2
转载 2018-10-05 13:58:24 · 118 阅读 · 0 评论 -
1
转载 2018-10-05 13:56:50 · 120 阅读 · 0 评论 -
ae
有一种机制,可以在一个事件(可读或者可写)发生的时候,才告知到进程在函数中,调用aeApiPoll来监控事件,该函数封装了select、kqueue、epoll三种机制numevents = aeApiPoll(eventLoop, tvp);epoll是poll的升级版本,把描述符列表交给内核,一旦有事件发生,内核把发生事件的描述符列表通知给进程,这样就避免了轮询整个描述符列表。效率...转载 2018-10-04 00:15:38 · 392 阅读 · 1 评论 -
Redis源码剖析和注释(十九)--- Redis 事件处理实现
Redis源码剖析和注释(十九)--- Redis 事件处理实现 https://blog.csdn.net/men_wen/article/details/71514524。 https://blog.csdn.net/men_wen/article/details/71514524Redis 事件处理实现1. Redis事件介绍Redis服务器是一个事件驱动程序。下面先...转载 2018-09-17 23:32:10 · 195 阅读 · 0 评论 -
. Redis server
. Redis server基本数据结构redisServer主要记录了server的全局信息,如数据库,连入的client,支持的所有操作,从配置文件中读取的配置信息等。//redis.h struct redisServer { pthread_t mainthread; //主线程 int port; //端口号 char *bindaddr; //地址 ...转载 2018-09-17 22:16:26 · 387 阅读 · 0 评论 -
FileEvent
在了解整个事件驱动的模型前,有先了解一些定义的事件结构体,事件类型总共2个一个FileEvent,TimeEvent: /* File event structure */ /* 文件事件结构体 */ typedef struct aeFileEvent { //只为读事件或者写事件中的1种 int mask; /* one of AE...转载 2018-08-22 00:23:54 · 610 阅读 · 0 评论 -
我读过最好的Epoll模型讲解
我读过最好的Epoll模型讲解 首先我们来定义流的概念,一个流可以是文件,socket,pipe等等可以进行I/O操作的内核对象。 不管是文件,还是套接字,还是管道,我们都可以把他们看作流。 之后我们来讨论I/O的操作,通过read,我们可以从流中读入数据;通过write,我们可以往流写入数据。现在假定一个情形,我们需要从流中读数据,但是流中还没有数据,(典...转载 2018-08-21 18:28:56 · 172 阅读 · 0 评论 -
Redis源码剖析和注释(十九)--- Redis 事件处理实现
Redis源码剖析和注释(十九)--- Redis 事件处理实现Redis 事件处理实现1. Redis事件介绍Redis服务器是一个事件驱动程序。下面先来简单介绍什么是事件驱动。所谓事件驱动,就是当你输入一条命令并且按下回车,然后消息被组装成Redis协议的格式发送给Redis服务器,这就会产生一个事件,Redis服务器会接收该命令,处理该命令和发送回复,而当你没有与服务器进行交互...转载 2018-08-21 15:29:06 · 207 阅读 · 0 评论 -
Redis官方文档》Redis事件库
Redis官方文档》Redis事件库原文链接 译者:cndpzchttp://ifeve.com/redis-eventlib/Redis实现了自己的事件库,代码在ae.c中。想要理解Redis事件库的工作原理,最好的方法就是去理解Redis如何使用它。事件循环初始化redis.c中的initServer函数初始化了redisServer结构体变量的众多成员,其中一个就是Redis...转载 2018-08-19 23:40:27 · 160 阅读 · 0 评论 -
redis服务器是基于事件驱动机制实现的
redis服务器是基于事件驱动机制实现的。所谓事件驱动是指,根据发生的事件(比如点击鼠标)进行相应的处理。一般事件驱动程序由事件收集器,事件分发器,事件处理器三部分组成。事件收集器负责接收事件(包括来自用户的或软件硬件的事件),事件分发器负责将事件发送到相应的事件处理器程序,事件处理器则负责处理具体事件。redis中的事件有文件事件和时间事件两类。redis自己实现了一套事件驱动机制(类似l...转载 2018-08-19 19:54:30 · 306 阅读 · 0 评论 -
使用Visual Studio2012调试Redis源码
Redis是一款C语言编写Key-Value存储系统,基于BSD协议开放源码,其源码托管在github上,大概有三万行。源码地址:https://github.com/antirez/redis源码依赖于linux平台,采用GNU MAKE工具进行项目管理,而且官方没有提供Redis的Windows版本。作为源码的学习者,我们更希望使用集成开发工具来管理项目,这样代码的层次结构显得比较清晰...转载 2018-08-19 11:55:30 · 433 阅读 · 0 评论 -
aeFileProc
http://gosaturn.github.io/%E6%BA%90%E7%A0%81%E5%AD%A6%E4%B9%A0/2015/11/23/redis%E6%BA%90%E7%A0%81%E5%AD%A6%E4%B9%A0_%E4%BA%8B%E4%BB%B6/当客户端连接到服务器时,会调用acceptTcpHandler处理函数,服务器会为每个链接创建一个client对象,并创建相应...转载 2018-08-18 14:42:49 · 543 阅读 · 0 评论 -
socket--socket()、bind()、listen()、connect()、accept()、recv()、send()、select()、close()、shutdown(
socket--socket()、bind()、listen()、connect()、accept()、recv()、send()、select()、close()、shutdown() 转载自 http://blog.csdn.net/amaowolf/article/details/8008575 转载自 http://www.cnblogs.com/jianqiang2010/ar...转载 2018-10-06 10:29:05 · 703 阅读 · 1 评论 -
getaddrinfo()
getaddrinfo接口getaddrinfo通过res来返回一个指向struct addrinfo结构链表的指针(注意这里返回的是一个链表),struct addrinfo结构的定义如下所示: struct addrinfo { int ai_flags; /* Input flags. */ int ai_family; /* Protocol...转载 2018-10-06 18:05:00 · 610 阅读 · 0 评论 -
Redis源码剖析和注释(八)--- 对象系统(redisObject)
Redis源码剖析和注释(八)--- 对象系统(redisObject)本文链接:https://blog.csdn.net/men_wen/article/details/70257207Redis 对象系统1. 介绍redis中基于双端链表、简单动态字符串(sds)、字典、跳跃表、整数集合、压缩列表、快速列表等等数据结构实现了一个对象系统,并且实现了5种不同的对象,每种对...转载 2019-08-29 13:48:18 · 190 阅读 · 0 评论 -
redis里的小秘密:设置进程名
[0x00]redis里的小秘密:设置进程名linux macOS下设置进程名base on redis source code 5.0.3在redis server启动过程中, 有一个宏和一个函数显得很奇特, 他们是server.c中main()函数中的第一个宏和第一个函数, 宏INIT_SETPROCTITLE_REPLACEMENT和函数spt_init(argc, a...转载 2019-08-29 12:15:56 · 1234 阅读 · 1 评论 -
Redis源码剖析(八)链表
Redis源码剖析(八)链表本文链接:https://blog.csdn.net/sinat_35261315/article/details/79015973在之前对Redis的介绍中,可以看到链表的使用频率非常高。链表可以作为单独的存储结构,比如客户端的监视链表记录该客户端监视的所有键,服务器的模式订阅链表记录所有客户端和它的模式订阅。链表也可以内嵌到字典中作为字典的值类...转载 2019-08-27 15:34:57 · 131 阅读 · 0 评论 -
Redis源码剖析和注释(十六)---- Redis输入输出的抽象(rio)
Redis源码剖析和注释(十六)---- Redis输入输出的抽象(rio)。 https://blog.csdn.net/men_wen/article/details/71131550Redis 输入输出的抽象(rio)1. 概述rio是Redis对IO操作的一个抽象,可以面向不同的输入输出设备,例如一个缓冲区IO、文件IO和socket IO。一个rio对象提供一下四个方...转载 2019-06-30 15:40:30 · 206 阅读 · 0 评论 -
高并发网络编程之epoll详解
高并发网络编程之epoll详解https://blog.csdn.net/shenya1314/article/category/6655548https://github.com/menwengit/redis_source_annotation在linux 没有实现epoll事件驱动机制之前,我们一般选择用select或者poll等IO多路复用的方法来实现并发服务程序。在大数...转载 2019-06-24 14:34:04 · 271 阅读 · 0 评论 -
Redis AE异步事件库实例分析
Redis AE异步事件库实例分析https://www.jianshu.com/p/da092472080eRedis使用了一个称为“A simple event-driven programming library”的自制异步事件库(以下简称“AE”)。整个事件库的代码量少于1k行,是个优秀的C异步事件库学习材料。源码结构版本 Redis 4.0.8r...转载 2019-06-24 11:23:08 · 474 阅读 · 0 评论 -
redis学习笔记(17)---RDB持久化
redis学习笔记(17)---RDB持久化https://blog.csdn.net/u012658346/article/details/51385770https://github.com/menwengit/redis_source_annotation1、RDB文件 redis是一个基于内存的数据库,数据库中的所有数据都是保存在内存中的。 当进程退出时,内存中的数...转载 2019-06-22 22:30:03 · 125 阅读 · 0 评论 -
Redis---客户端和服务端
Redis---客户端和服务端 文章转载自:http://redisbook.readthedocs.io/en/latest/internal/redis.htmlhttp://www.spongeliu.com/category/linuxhttps://blog.csdn.net/guodongxiaren/article/details/44747719https://...转载 2018-11-01 23:07:01 · 312 阅读 · 0 评论 -
Redis源码剖析和注释(十七)--- RDB持久化机制
Redis源码剖析和注释(十七)--- RDB持久化机制serverCron函数执行,程序会查看服务器当前使用的内存数量,并与redisServer中的stat_peak_memory属性值比较,如果比该值大,则存入。INFO memory命令的 used_memory_peak 和 used_memory_peak_human两个域记录了服务器的内存峰值 https://blog....转载 2018-10-26 17:09:44 · 322 阅读 · 0 评论 -
为什么JavaScript是单线程?
http://www.ruanyifeng.com/blog/computer/ 为什么JavaScript是单线程?JavaScript语言的一大特点就是单线程,也就是说,同一个时间只能做一件事。那么,为什么JavaScript不能有多个线程呢?这样能提高效率啊。JavaScript的单线程,与它的用途有关。作为浏览器脚本语言,JavaScript的主要用途是与用户互动,以及操作...转载 2018-10-09 15:13:54 · 758 阅读 · 0 评论 -
Redis源码解析:15Resis主从复制之从节点流程
Redis源码解析:15Resis主从复制之从节点流程 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gqtcgq/article/details/51172085 Redis的主从复制功能,可以实现Redis实例的高可用,避免单个Redis 服务器的单点故障,并且可以实现负载均衡。 一:主从复制过程 ...转载 2018-10-18 17:26:45 · 339 阅读 · 0 评论 -
Redis的BIO系统
Redis的BIO系统 Redis通过bio系统完成两件事,一是进行Aof持久化,也就是将写入到系统的page cache的数据fsync到磁盘中;二是关闭文件。为了完成这件任务,其采用了任务队列的方式,每个任务都是一个线程来完成,任务会被放到任务队列中,然后由执行任务线程取走,如果队列空,则阻塞等待,如果队列里有任务,就通知工作线程,这通过条件变量来实现。后面以任务初始化,任务放入队列,任...转载 2018-10-08 17:06:34 · 249 阅读 · 0 评论 -
Redis内存管理的基石zmallc.c源码解读(一)
CPU一次性能读取数据的二进制位数称为字长,也就是我们通常所说的32位系统(字长4个字节)、64位系统(字长8个字节)的由来。所谓的8字节对齐,就是指变量的起始地址是8的倍数。比如程序运行时(CPU)在读取long型数据的时候,只需要一个总线周期,时间更短,如果不是8字节对齐的则需要两个总线周期才能读完数据。 本文中我提到的8字节对齐是针对64位系统而言的,如果是32位系统那么就是4...转载 2018-07-07 13:35:57 · 178 阅读 · 0 评论 -
redis
最近在阅读redis源代码,决定将自己的一些理解记下来,用于备份和检查。无奈技术水平很挫,如果有错误,还希望指正。代码版本是2.6.2,代码量比2.4.17大了很多。==! adlist.h 定义了一个双链表结构。typedef struct listNode {struct listNode *prev;struct listNode *next;void *value;} listNode;t...转载 2018-07-04 22:18:30 · 145 阅读 · 0 评论 -
redis文件事件结构体
[cpp] view plain copy /* File event structure */ /* 文件事件结构体 */ typedef struct aeFileEvent { //只为读事件或者写事件中的1种 int mask; /* one of AE_(READABLE|WRITABLE) */ //读方法 aeFileProc *rfile...转载 2018-05-14 23:51:53 · 202 阅读 · 0 评论 -
Redis内存管理的基石zmallc.c源码解读
Redis内存管理的基石zmallc.c源码解读(一)源码结构zmalloc.c文件的内容如下:主要函数zmalloc()zfree()zcalloc()zrelloc()zstrdup()字长与字节对齐 CPU一次性能读取数据的二进制位数称为字长,也就是我们通常所说的32位系统(字长4个字节)、64位系统(字长8个字节)的由来。所谓的8字节对齐,就是指变量的起始地址是8的倍数。比如...转载 2018-05-14 20:52:38 · 221 阅读 · 0 评论 -
Redis源码分析(十九)--- replication主从数据复制的实现
Redis源码分析(十九)--- replication主从数据复制的实现 replication的英文单词的原意是“复制”的意思,replication文件作为我在Data目录下的分析的最后一个文件,足以说明他的重要性,代码量1800+,的确非常难啃。只能说个我看代码下来的大...转载 2018-05-14 19:39:34 · 496 阅读 · 0 评论 -
redis分布式锁-SETNX实现
redis分布式锁-SETNX实现 摘要: redis分布式锁-SETNX实现 Redis有一系列的命令,特点是以NX结尾,NX是N...转载 2018-05-19 21:15:12 · 271 阅读 · 0 评论 -
redis操作测试
package com.transn; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import java.util.concu...转载 2018-05-06 12:42:49 · 249 阅读 · 0 评论 -
如何使用RedisTemplate访问Redis数据结构
如何使用RedisTemplate访问Redis数据结构 Redis 数据结构简介Redis 可以存储键与5种不同数据结构类型之间的映射,这5种数据结构类型分别为String(字符串)、List(列表)、Set(集合)、Hash(散列)和 Zset(有序集合)。下面来对这5种数据结构类型作简单的介绍:结构类型结构存储的值结构的读写能力String可以是字符...转载 2018-05-06 11:19:58 · 119 阅读 · 0 评论 -
Spring Data Redis 二:RedisTemplate实现事物问题剖析和解决
Spring Data Redis 二:RedisTemplate实现事物问题剖析和解决 一、问题描述 Redis为单进程单线程模式,采用队列模式将并发访问变成串行访问,Redis对事物支持不会很复杂,当一个客服端连接Redis服务时,发出了MULTI命令时,这个连接会进入事物,在执行MULTI命...转载 2018-05-05 15:08:49 · 282 阅读 · 0 评论 -
数据库键空间
http://redisbook.com/preview/database/key_space.html#id1Redis 是一个键值对(key-value pair)数据库服务器,服务器中的每个数据库都由一个 redis.h/redisDb 结构表示,其中,redisDb 结构的 dict 字典保存了数据库中的所有键值对,我们将这个字典称为键空间(key space)typedef struct...转载 2018-02-20 19:48:13 · 312 阅读 · 0 评论 -
sds
双向链表(adlist.h/adlist.c)链表(list)是Redis中最基本的数据结构,由adlist.h和adlist.c定义。数据结构typedef struct listNode { //指向前一个节点 struct listNode *prev; //指向后一个节点 struct listN...转载 2018-02-20 18:58:44 · 1204 阅读 · 0 评论 -
dictEntry
typedef struct dictEntry { // 键 void *key; // 值 union { void *val; uint64_t u64; int64_t s64; } v; // 指向下个哈希表节点,形成链表 struct dictEntry *next;} d...转载 2018-02-19 20:55:53 · 1598 阅读 · 0 评论 -
lru
LRU(Least Recently Used) 最近最久未使用算法,是多数缓存系统当内存受限时自动清理旧数据的常用常用算法之一。当Redis使用内存达到配置maxmemory时,Redis会根据配置的policy进行数据置换处理,其中策略包括如下:noenviction(不清除)allkeys-lru(从所有数据集选择最近最少用)volatile-lru(从设置过期时间的数据集选择最近最少用)a...转载 2018-02-19 20:16:42 · 527 阅读 · 0 评论