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原理篇的技术博客分享!如果您有任何问题或建议,请随时在评论中告诉我们。谢谢!

相关文章
|
10月前
|
机器学习/深度学习 PyTorch TensorFlow
卷积神经网络深度解析:从基础原理到实战应用的完整指南
蒋星熠Jaxonic,深度学习探索者。深耕TensorFlow与PyTorch,分享框架对比、性能优化与实战经验,助力技术进阶。
|
存储 缓存 NoSQL
Redis 服务器全方位介绍:从入门到核心原理
Redis是一款高性能内存键值数据库,支持字符串、哈希、列表等多种数据结构,广泛用于缓存、会话存储、排行榜及消息队列。其单线程事件循环架构保障高并发与低延迟,结合RDB和AOF持久化机制兼顾性能与数据安全。通过主从复制、哨兵及集群模式实现高可用与横向扩展,适用于现代应用的多样化场景。合理配置与优化可显著提升系统性能与稳定性。
946 0
|
11月前
|
存储 人工智能 搜索推荐
一种专为AI代理设计的内存层,能够在交互过程中记忆、学习和进化
Mem0 是专为 AI 代理设计的内存层,支持记忆、学习与进化。提供多种记忆类型,可快速集成,适用于开源与托管场景,助力 AI 代理高效交互与成长。
975 123
一种专为AI代理设计的内存层,能够在交互过程中记忆、学习和进化
|
10月前
|
监控 负载均衡 安全
WebSocket网络编程深度实践:从协议原理到生产级应用
蒋星熠Jaxonic,技术宇宙中的星际旅人,以代码为舟、算法为帆,探索实时通信的无限可能。本文深入解析WebSocket协议原理、工程实践与架构设计,涵盖握手机制、心跳保活、集群部署、安全防护等核心内容,结合代码示例与架构图,助你构建稳定高效的实时应用,在二进制星河中谱写极客诗篇。
WebSocket网络编程深度实践:从协议原理到生产级应用
|
11月前
|
机器学习/深度学习 人工智能 算法
卷积神经网络深度解析:从基础原理到实战应用的完整指南
蒋星熠Jaxonic带你深入卷积神经网络(CNN)核心技术,从生物启发到数学原理,详解ResNet、注意力机制与模型优化,探索视觉智能的演进之路。
872 11
|
11月前
|
机器学习/深度学习 算法 搜索推荐
从零开始构建图注意力网络:GAT算法原理与数值实现详解
本文详细解析了图注意力网络(GAT)的算法原理和实现过程。GAT通过引入注意力机制解决了图卷积网络(GCN)中所有邻居节点贡献相等的局限性,让模型能够自动学习不同邻居的重要性权重。
1740 0
从零开始构建图注意力网络:GAT算法原理与数值实现详解
|
11月前
|
安全 测试技术 虚拟化
VMware-三种网络模式原理
本文介绍了虚拟机三种常见网络模式(桥接模式、NAT模式、仅主机模式)的工作原理与适用场景。桥接模式让虚拟机如同独立设备接入局域网;NAT模式共享主机IP,适合大多数WiFi环境;仅主机模式则构建封闭的内部网络,适用于测试环境。内容简明易懂,便于理解不同模式的优缺点与应用场景。
1526 0
|
机器学习/深度学习 人工智能 PyTorch
零基础入门CNN:聚AI卷积神经网络核心原理与工业级实战指南
卷积神经网络(CNN)通过局部感知和权值共享两大特性,成为计算机视觉的核心技术。本文详解CNN的卷积操作、架构设计、超参数调优及感受野计算,结合代码示例展示其在图像分类、目标检测等领域的应用价值。
704 7
|
监控 应用服务中间件 Linux
掌握并发模型:深度揭露网络IO复用并发模型的原理。
总结,网络 I/O 复用并发模型通过实现非阻塞 I/O、引入 I/O 复用技术如 select、poll 和 epoll,以及采用 Reactor 模式等技巧,为多任务并发提供了有效的解决方案。这样的模型有效提高了系统资源利用率,以及保证了并发任务的高效执行。在现实中,这种模型在许多网络应用程序和分布式系统中都取得了很好的应用成果。
392 35
|
11月前
|
存储 缓存 监控
Redis分区的核心原理与应用实践
Redis分区通过将数据分散存储于多个节点,提升系统处理高并发与大规模数据的能力。本文详解分区原理、策略及应用实践,涵盖哈希、范围、一致性哈希等分片方式,分析其适用场景与性能优势,并探讨电商秒杀、物联网等典型用例,为构建高性能、可扩展的Redis集群提供参考。
539 0