Redis系列学习文章分享---第十八篇(Redis原理篇--网络模型,通讯协议,内存回收)

简介: Redis系列学习文章分享---第十八篇(Redis原理篇--网络模型,通讯协议,内存回收)

Redis网络模型-epoll的ET和LT模式

Redis采用epoll作为网络模型,通过ET(Edge Triggered)和LT(Level Triggered)两种模式来处理网络事件。ET模式只在状态变化时触发事件,而LT模式则在状态可读或可写时触发事件。

示例代码:

// 设置socket为ET模式
int flags = fcntl(sockfd, F_GETFL, 0);
fcntl(sockfd, F_SETFL, flags | O_NONBLOCK | O_ET);
// 设置socket为LT模式
int flags = fcntl(sockfd, F_GETFL, 0);
fcntl(sockfd, F_SETFL, flags | O_NONBLOCK)

Redis网络模型-基于epoll的服务端流程

Redis服务端在启动时,会创建一个epoll实例,并监听客户端连接。当有新连接时,会注册对应的事件处理函数,并使用非阻塞IO模式进行通信。

示例代码:

// 创建epoll实例
int epoll_fd = epoll_create1(0);
if (epoll_fd == -1) {
    perror("epoll_create1");
    exit(EXIT_FAILURE);
}
// 监听客户端连接
epoll_event.events = EPOLLIN | EPOLLET; // 使用ET模式
epoll_event.data.fd = sockfd;
if (epoll_ctl(epoll_fd, EPOLL_CTL_ADD, sockfd, &epoll_event) == -1) {
    perror("epoll_ctl");
    exit(EXIT_FAILURE);
}
// 处理事件循环
while (1) {
    int num_events = epoll_wait(epoll_fd, events, MAX_EVENTS, -1);
    for (int i = 0; i < num_events; i++) {
        if (events[i].data.fd == sockfd) {
            // 处理新连接
            handle_new_connection(sockfd);
        } else {
            // 处理数据读写
            handle_io_event(events[i].data.fd);
        }
    }
}

Redis网络模型-信号驱动IO及异步IO

Redis采用信号驱动IO(Signal-driven IO)和异步IO(Asynchronous IO)来提高IO效率。信号驱动IO通过信号通知内核完成IO操作,而异步IO则由内核完成IO操作后通知应用程序。

示例代码:

// 设置信号处理函数
signal(SIGIO, io_handler);
// 设置socket为异步IO模式
int flags = fcntl(sockfd, F_GETFL, 0);
fcntl(sockfd, F_SETFL, flags | O_ASYNC);

Redis网络模型-Redis是单线程吗,为什么用单线程

Redis采用单线程模型,即每个客户端连接对应一个线程。这样做的好处是避免了线程切换和同步开销,提高了并发能力。

Redis网络模型-Redis单线程及多线程网络模型变

Redis在4.0版本中引入了多线程网络模型,通过线程池处理IO事件,提高了并发处理能力。

Redis通信协议-RESP协议

Redis通信协议采用RESP(REdis Serialization Protocol),是一种简单而高效的二进制协议。

示例代码:

*3\r\n$3\r\nSET\r\n$5\r\nmykey\r\n$7\r\nmyvalue\r\n

Redis通信协议-基于socket的自定义Redis客户端

开发一个基于socket的自定义Redis客户端,可以直接与Redis服务器进行通信。

示例代码:

// 创建Socket连接
Socket socket = new Socket("localhost", 6379);
// 发送命令
OutputStream outputStream = socket.getOutputStream();
outputStream.write("SET mykey myvalue\r\n".getBytes());
// 接收响应
InputStream inputStream = socket.getInputStream();
byte[] buffer = new byte[1024];
inputStream.read(buffer);
String response = new String(buffer);
System.out.println(response);

Redis内存回收-过期key处理

Redis采用惰性删除和定期删除两种方式处理过期key。惰性删除是在访问时检查key是否过期,而定期删除是通过定时任务扫描过期key进行删除。

感谢您阅读本篇Redis原理篇的技术博客分享!如果您有任何问题或建议,请随时在评论中告诉我们。谢谢!

相关文章
|
9月前
|
机器学习/深度学习 PyTorch TensorFlow
卷积神经网络深度解析:从基础原理到实战应用的完整指南
蒋星熠Jaxonic,深度学习探索者。深耕TensorFlow与PyTorch,分享框架对比、性能优化与实战经验,助力技术进阶。
|
11月前
|
机器学习/深度学习 算法 数据挖掘
没发论文的注意啦!重磅更新!GWO-BP-AdaBoost预测!灰狼优化、人工神经网络与AdaBoost集成学习算法预测研究(Matlab代码实现)
没发论文的注意啦!重磅更新!GWO-BP-AdaBoost预测!灰狼优化、人工神经网络与AdaBoost集成学习算法预测研究(Matlab代码实现)
294 0
|
9月前
|
监控 负载均衡 安全
WebSocket网络编程深度实践:从协议原理到生产级应用
蒋星熠Jaxonic,技术宇宙中的星际旅人,以代码为舟、算法为帆,探索实时通信的无限可能。本文深入解析WebSocket协议原理、工程实践与架构设计,涵盖握手机制、心跳保活、集群部署、安全防护等核心内容,结合代码示例与架构图,助你构建稳定高效的实时应用,在二进制星河中谱写极客诗篇。
WebSocket网络编程深度实践:从协议原理到生产级应用
|
9月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
910 6
|
10月前
|
机器学习/深度学习 人工智能 算法
卷积神经网络深度解析:从基础原理到实战应用的完整指南
蒋星熠Jaxonic带你深入卷积神经网络(CNN)核心技术,从生物启发到数学原理,详解ResNet、注意力机制与模型优化,探索视觉智能的演进之路。
800 11
|
10月前
|
存储 缓存 NoSQL
工作 10 年!Redis 内存淘汰策略 LRU 和传统 LRU 差异,还傻傻分不清
小富带你深入解析Redis内存淘汰机制:LRU与LFU算法原理、实现方式及核心区别。揭秘Redis为何采用“近似LRU”,LFU如何解决频率老化问题,并结合实际场景教你如何选择合适策略,提升缓存命中率。
1324 3
|
10月前
|
JavaScript Java 大数据
基于python的网络课程在线学习交流系统
本研究聚焦网络课程在线学习交流系统,从社会、技术、教育三方面探讨其发展背景与意义。系统借助Java、Spring Boot、MySQL、Vue等技术实现,融合云计算、大数据与人工智能,推动教育公平与教学模式创新,具有重要理论价值与实践意义。
|
10月前
|
机器学习/深度学习 算法 搜索推荐
从零开始构建图注意力网络:GAT算法原理与数值实现详解
本文详细解析了图注意力网络(GAT)的算法原理和实现过程。GAT通过引入注意力机制解决了图卷积网络(GCN)中所有邻居节点贡献相等的局限性,让模型能够自动学习不同邻居的重要性权重。
1642 0
从零开始构建图注意力网络:GAT算法原理与数值实现详解
|
10月前
|
安全 测试技术 虚拟化
VMware-三种网络模式原理
本文介绍了虚拟机三种常见网络模式(桥接模式、NAT模式、仅主机模式)的工作原理与适用场景。桥接模式让虚拟机如同独立设备接入局域网;NAT模式共享主机IP,适合大多数WiFi环境;仅主机模式则构建封闭的内部网络,适用于测试环境。内容简明易懂,便于理解不同模式的优缺点与应用场景。
1347 0
|
12月前
|
存储
阿里云轻量应用服务器收费标准价格表:200Mbps带宽、CPU内存及存储配置详解
阿里云香港轻量应用服务器,200Mbps带宽,免备案,支持多IP及国际线路,月租25元起,年付享8.5折优惠,适用于网站、应用等多种场景。
3336 0