Redis源码剖析(5) 之前总结了redis的通讯流程,基本框架,epoll的封装等等,这次介绍下redis对于select模型的封装 _rfds和_wfds是读写结合的副本,因为select调用后会将读写集合中未就绪的文件描述符清除,所以每次用_rfds和_wfds传入,就不用担心原读写集合描述符被清除。 封装的基于select的初始化函数 函数将读写集合清零,并且将state回传给eventloop的apidata部 Redis 2025-05-05 qc
Redis源码剖析(4) 上一篇讲述了eventloop的结构和创建,添加文件事件删除文件事件,派发等等。 而eventloop主要就是调用不同网络模型完成事件监听和派发的。 这一篇主要讲述epoll网络模型,redis是如何封装和调用的 下面是epoll_event的结构 Ae_epoll.c文件中回传的数据结构 Ae_epoll.c中创建epoll句柄 Ae_epoll.c重新设置events队列大小 Ae_epoll Redis 2025-05-01 qc
Redis源码剖析(3) 上一篇讲完了initServer的大体流程,其中aeCreateEventLoop(),这个函数没有详细说明,我们在这一篇里讲述Ae.h和Ae.c, 这里面的api阐述了如何创建 eventLoop和添加文件读写事件等等。 ae.h中的解释 //文件读写事件回调函数 typedef void aeFileProc(struct aeEventLoop *eventLoop, int fd, vo Redis 2025-04-24 qc
Redis源码剖析(2) 之前梳理过redis main函数主体流程 `大体是 initServerConfig() -> loadServerConfig() -> daemonize() -> initServer() -> aeSetBeforeSleepProc() ->aeMain() -> aeDeleteEventLoop(); initServerConfig( Redis 2025-04-21 qc
Redis源码剖析(1) 近期学习了redis底层框架,好多东西之前都没听说过,算是大开眼界了。 先梳理下redis正常的通讯流程吧 首先服务器启动都有主函数main,这个main函数就在redis.c里 首先是initserverconfig(),在这里初始化了redisserver基本的配置信息, 接着调用loadServerConfig(char *filename) 对 server 全局变量重新初始化。 Redis 2025-04-20 qc
Redis实现分布式锁 1. 为什么要用分布式锁? 分布式系统下,不同的服务/客户端通常运行在独立的进程上。如果多个进程共享同一份资源的话,使用本地锁就没办法实现资源的互斥访问了。于是,分布式锁 就诞生了 分布式锁的特点: 2. 乐观锁和悲观锁 使用场景: 3.分布式锁的实现方式 常见分布式锁实现方案如下: 3.1基于Redis的实现 setnx + expire组合命令 在redis中,SETNX命令可以实现互斥,即S Redis 2025-01-17 qc