
redis
jwybobo2007
站在脚下看世界
展开
-
redis7.x源码分析:(6) bio后台服务
当任务到来时,主线程将任务添加到相应操作类型的任务队列中,并唤醒等待在该队列上的线程。redis的BIO(Background I/O)顾名思义:后台I/O服务,是Redis中用于处理一些需要异步执行的后台任务的一个线程池。由此我们也可以看出,redis其实并非真正的单线程程序,只是它的主要数据库读写处理流程是在主线程完成的,但内部是会启动多种线程来辅助提升效率的。除了BIO的线程外,后续我还会讲解网络IO多线程的代码实现,也会涉及到整体主流程框架的实现原理。作者:jwybobo2007。原创 2024-11-28 09:54:39 · 299 阅读 · 0 评论 -
redis7.x源码分析(目录)
redis7.x源码分析:(1) sds动态字符串redis7.x源码分析:(2) adlist双向链表redis7.x源码分析:(3) dict字典redis7.x源码分析:(4) ae事件处理器(一)redis7.x源码分析:(5) ae事件处理器(二)原创 2024-11-24 23:56:47 · 327 阅读 · 0 评论 -
redis7.x源码分析:(5) ae事件处理器(二)
Redis的定时器实现比较简单,它并未使用最小堆或者时间轮之类的方式来管理定时事件,而是直接使用一个双向链表把所有的定时器事件串起来,然后通过遍历去实现一些功能。从代码中可以看出,最早超时时间就是通过遍历链表找出超时时间when最小的事件来实现的。对于定时器的删除操作不会立即执行,而是将定时器修改为无效,在下一轮的 processTimeEvents 中处理。它是在 aeProcessEvents 的函数末尾调用的,通过遍历链表确认是否有事件超时,然后执行相应的超时回调。接上篇,接下来看定时器事件的处理。原创 2024-11-23 13:00:00 · 368 阅读 · 0 评论 -
redis7.x源码分析:(4) ae事件处理器(一)
ae模块是redis实现的Reactor模型的封装。它的主要代码实现集中在 ae.c 中,另外还提供了平台相关的io多路复用的封装,它们都实现了一套相同的poll接口,就类似于C++中提供了一个接口基类,由针对不同平台的派生类去实现。aeEventLoop中的events是用于保存fd注册事件的数组,它是以fd值作为索引来存取事件的。实际使用的io模型会根据编译时定义的宏在 ae.c 的代码头部直接引入。接下来再看一下ae相关接口,先看下fd相关实现。原创 2024-11-22 16:00:28 · 472 阅读 · 0 评论 -
redis7.x源码分析:(3) dict字典
另外,dict对hash值相同的key采用了常规的开链法存储,而unordered_map在采用开链法的前提下,又使用了_M_before_begin将不同桶中的链表串联成了一个大链表,从而将遍历速度优化为O(n);还有就是,dict为应对服务器性能上的特殊要求,设计成了双hash表的形式,这也使得它的rehash等操作存在一些特殊性。hash表的创建比较简单直接略过,先看下 _dictExpand 的实现,它在hash表扩容缩容和创建时都会用到。两者在代码实现层面存在一些差异,比如gnustl的。原创 2024-11-14 18:05:00 · 631 阅读 · 0 评论 -
redis7.x源码分析:(2) adlist双向链表
listNode中的value定义为void *,所以它可以被用来存储任意类型的数据。而对于不同的数据,在处理时可能需要用到不同的函数,因此在list中定义了3个函数指针,分别对应不同类型数据的复制、释放和对比功能。当对value进行处理时,如果设置了函数指针,就有可能会调用它们进行相应处理。链表是一种常用的数据结构(如果不了解,请先学习数据结构),由于c语言本身没有实现标准的链表库,所以redis自己实现了一个双向链表。双向链表在redis内部的使用非常的多,几乎所有模块中都有用到。原创 2024-11-12 18:03:49 · 362 阅读 · 0 评论 -
redis7.x源码分析:(1) sds动态字符串
其实它和C++标准库中的string在一定程度上是比较类似的,都是用来完成对字符串缓冲区的动态分配、管理以及其它一些相应操作的。另外,sds在设计中本身也是二进制安全的,而且sds会在末尾多分配1字节并且置’\0’,用于防止一些字符串操作的越界问题。sds的定义非常简单,直接就是一个char*的别名,因此sds本身具备C字符串的特性,可以使用strcpy、strlen等函数。sds在分配空间时,是包含头结构的,但真正返回的却是buf成员的地址,这就是sds具备C字符串的特性的原因。原创 2024-11-11 18:02:08 · 441 阅读 · 0 评论