Redis源码剖析(5) 之前总结了redis的通讯流程,基本框架,epoll的封装等等,这次介绍下redis对于select模型的封装 _rfds和_wfds是读写结合的副本,因为select调用后会将读写集合中未就绪的文件描述符清除,所以每次用_rfds和_wfds传入,就不用担心原读写集合描述符被清除。 封装的基于select的初始化函数 函数将读写集合清零,并且将state回传给eventloop的apidata部 Redis 2025-05-05 qc
详解Epoll(2) 前一篇介绍了epoll的LT模式,LT模式注意epollout事件在数据全部写成功后需要取消关注,或者更改为EPOLLIN。 而这次epoll的ET模式,要注意的是在读和写的过程中要在循环中写完或者读完所有数据,确保不要丢掉一些数据。 因为epoll ET模式只在两种边缘更改的时候触发,对于读事件只在内核缓冲区由空变为 非空通知一次用户,对于写事件,内核缓冲区只在由满变为非满的情况通知用户一次。& 网络编程 2025-05-03 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
详解Epoll(1) 网络通信中socket有自己的内核发送缓冲区和内核接受缓冲区,好比是一个水池,当用户发送数据的时候会从用户缓冲区拷贝到socket的内核发送缓冲区,然后从 socket发送缓冲区发出去, 当用户要读取数据时,就是从socket内核读缓冲区读到用户缓冲区。所以TCP中recv, send, read, write等函数并不是真的直接读写 发送报文,而是将数据分别写到so 网络编程 2025-04-30 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
谈谈HTTP/2与gRPC之间的关系 我对于HTTP/2.0的理解源于 对gRPC on HTTP/2的理解基于 在读本文前需要了解HTTP/2的相关知识,可以看我写的HTTP与HTTP2 废话不多说,现在开始。 gRPC gRPC(协议)是一个RPC协议,作为一个基本的RPC协议,需要传输哪些数据? 作为一个优秀的RPC协议,还需要传输哪些数据? 以上数据除了请求参数和返回值是在http body,安全是在TLS和header,其他 网络协议 2025-04-11 qc
HTTP与HTTP2 HTTP 此文章只讨论HTTP和HTTP2,不讨论TLS和HTTP3 什么是HTTP HTTP(超文本传输协议,HyperText Transfer Protocol)是 中的应用层协议。 为什么需要HTTP? HTTP(超文本传输协议)的主要作用是在客户端和服务器之间传输超文本(如HTML)及其他资源。 为什么不直接用tcp传输 HTTP/1.1 HTTP/1.1就是要解决上面直接用tcp的问题 网络协议 2025-04-09 qc
Cookie、Session、Token、JWT 什么是 Cookie cookie 重要的属性: 什么是 Session session 认证流程: 根据以上流程可知,SessionID 是连接 Cookie 和 Session 的一道桥梁,大部分系统也是根据此原理来验证用户登录状态。 Cookie 和 Session 的区别 什么是 Token(令牌) Acesss Token 特点: token 的身份验证流程: 每一次请求都需要携带 to c++学习总结 go学习总结 2025-03-07 qc