- 博客(143)
- 收藏
- 关注
原创 Reids命令原理与应用2 - Redis网络层与优化,pipeline,发布订阅与事务
本文介绍了Redis的核心功能原理与应用。首先分析Redis网络层的单线程处理机制与多线程IO模型,说明其如何实现高效请求处理。其次讲解Pipeline技术通过批量请求减少网络IO开销的原理。然后详细说明发布订阅模式的使用方法及其不保证送达的局限性。接着深入解析Redis事务的MULTI/EXEC机制和Lua脚本实现方式,比较两者的优劣。最后从ACID特性角度评估Redis事务的原子性、一致性等问题。文章通过具体命令示例和原理图解,全面阐述了Redis在网络通信、消息传递和事务处理方面的核心机制与应用场景。
2025-12-26 16:27:58
613
原创 Reids命令原理与应用1 - Redis命令与原理
Redis是一种高性能内存数据库,采用键值对存储结构,支持字符串、列表、哈希、集合和有序集合五种数据类型。字符串可存储文本/数字/图片;列表适合实现队列/栈;哈希用于存储对象信息;集合支持交并补运算;有序集合可实现排行榜功能。Redis提供丰富的操作命令,并采用定期删除和惰性删除相结合的过期数据清理策略。通过合理设计key(如用冒号分隔)和组合不同value类型,可满足多样化应用场景需求。其内存存储特性使操作效率比磁盘数据库高出约10万倍。
2025-12-24 15:37:22
567
原创 C/C++ Linux网络编程16 -数据链路层,ARP协议
本文介绍了数据链路层和ARP协议的工作原理。数据链路层通过以太网协议实现局域网内主机通信,采用MAC帧结构(64-1518字节)和CSMA/CD机制解决数据碰撞问题。MTU单元限制数据包大小(1500字节),影响TCP/UDP传输效率。TCP通过MSS协商避免分片,而UDP超过1472字节会导致分片风险。ARP协议用于IP地址到MAC地址的转换,通过广播请求和单播应答实现地址解析,并缓存结果提高后续通信效率。
2025-12-20 15:49:10
933
原创 C/C++ Linux网络编程14 - 传输层TCP协议详解(保证可靠传输)
本文详细解析了TCP协议的可靠传输机制。首先介绍了TCP报头关键字段:序列号/确认号保证数据顺序,窗口大小实现流量控制,标记位区分报文类型。其次阐述了四大核心机制:1)确认应答确保数据接收;2)超时重传处理丢包问题;3)滑动窗口整合应答、重传和流量控制;4)拥塞控制通过慢启动、拥塞避免和快恢复算法平衡网络效率。文章通过具体场景分析,展示了TCP如何通过这组机制实现可靠、高效的数据传输。
2025-12-15 22:20:49
1489
原创 C/C++ Linux网络编程13 - 传输层TCP协议详解(面向字节流和有连接)
本文详细介绍了TCP协议的传输层特性。主要内容包括:1)TCP报头格式分析,首部长度可变(20-60字节);2)面向字节流的特点及粘包问题解决方案;3)TCP连接建立的三次握手过程和断开连接的四次挥手过程;4)TIME_WAIT状态的作用及端口复用解决方法;5)TCP可靠传输机制的简要概述。文章通过代码示例和流程图详细解析了TCP协议的关键技术点,包括连接管理、状态转换等核心概念。
2025-12-14 17:42:34
1229
原创 C/C++ Linux网络编程12 - 传输层UDP协议详解
本文介绍了网络编程中端口号与UDP协议的相关知识。首先解释了端口号的作用和划分规则(0-1023为知名端口,1024-65535为用户分配),列举了常见服务的端口号。其次详细讲解了UDP协议的特点:8字节报头结构、无连接、面向数据报、不可靠传输等特性,并分析了UDP缓冲区的工作机制(只有接收缓冲区,发送立即执行)。最后指出UDP数据包最大64KB的限制,并列举了DNS、DHCP等基于UDP的典型应用协议。文章还介绍了netstat和pidof等网络诊断工具的使用方法。
2025-12-10 20:49:38
1211
原创 C/C++ Linux网络编程11 - 数据加密与https协议
本文详细介绍了HTTPS协议的安全原理及加密方案。首先对比了HTTP明文传输的安全隐患,提出HTTPS通过加密层保护数据安全。重点分析了对称加密、非对称加密的特点及组合应用,阐述了数据摘要和数字签名的验证机制。文章深入探讨了四种加密方案(仅对称、仅非对称、双方非对称、混合加密)的优缺点,最终采用对称+非对称混合加密方案。最后解释了CA证书验证机制,说明如何通过数字签名防止中间人攻击,确保服务端公钥合法性,实现端到端的安全通信。
2025-12-09 22:42:44
805
原创 C/C++ Linux网络编程10 - http协议
本文介绍了Linux网络编程中服务器设计流程和HTTP协议实现。主要内容包括:1)服务器端基本流程(socket、bind、listen等系统调用)及其在OSI模型中的层次划分;2)HTTP协议详解,包括URL结构、请求/响应格式、状态码分类、常见头部字段和请求方法;3)代码验证部分展示了如何构建简单的HTTP响应,并对比了GET和POST方法在参数传递方式、数据量限制和安全性方面的差异。文章通过ReactorTCP服务器示例演示了HTTP请求的接收处理和响应生成过程。
2025-12-07 20:20:39
1107
原创 C/C++ Linux网络编程9 -服务器的独立运行
本文介绍了如何将Linux服务器进程守护化,使其在后台持续运行不受终端影响。主要内容包括:1. 解释会话、进程组和作业的概念及关系;2. 演示通过fork、setsid等系统调用创建守护进程的步骤:两次fork确保脱离原会话组,重定向标准I/O到/dev/null,并更改工作目录;3. 提供完整的守护进程实现代码。最终实现的效果是服务器进程在xshell退出后仍能保持运行,持续对外提供服务。
2025-12-05 17:10:34
755
原创 C/C++ Linux网络编程8 - epoll + ET Reactor TCP服务器
本文介绍了基于Reactor模式和epoll边缘触发(ET)的高性能TCP服务器实现。通过connItem结构体管理文件描述符与回调函数的映射关系,实现了网络IO与业务逻辑的解耦。服务器采用非阻塞IO和ET模式,通过一次性读取内核数据减少epoll_wait唤醒次数,显著提升了性能。测试结果显示,在1000并发下QPS达到16371,优于传统epoll水平触发模式。文章详细阐述了Reactor模式的事件派发机制、ET/LT模式差异、回调函数实现等核心设计,并提供了完整的代码实现。最后通过wrk压测数据对比验
2025-11-29 21:02:53
838
原创 C/C++ Linux网络编程7 - epoll解决客户端并发连接问题
本文介绍了Linux网络编程中epoll机制的原理与实现。epoll通过红黑树管理文件描述符,配合就绪队列和回调机制,解决了select/poll频繁拷贝和线性遍历的性能问题。文章详细解析了epoll_create、epoll_ctl和epoll_wait三个核心接口,并给出了基于epoll的TCP服务器实现方案。通过性能测试对比,在2核2G服务器配置下,epoll在1000并发时QPS达16880,优于poll的16844;在极端55555并发时,epoll仍能维持3829的QPS,显示出更好的稳定性。最
2025-11-25 00:28:48
1018
原创 45 C++类型转换和特殊类设计,单例模型详解
本文介绍了C++类型转换和特殊类设计。在类型转换部分,对比了C语言的强制类型转换与C++提供的四种更安全的类型转换:static_cast(相近类型转换)、dynamic_cast(多态类转换)、const_cast(去除const属性)和reinterpret_cast(重新解释内存)。在特殊类设计部分,重点讲解了单例模式的实现,包括饿汉模式(提前初始化)和懒汉模式(延迟加载),并通过互斥锁解决线程安全问题,最后展示了利用C++11特性实现的现代单例模式。文章还探讨了只能在栈或堆上创建对象的类设计方法。
2025-11-22 23:31:38
886
原创 C/C++ Linux网络编程6 - poll解决客户端并发连接问题
本文介绍了poll系统调用作为select的改进方案,用于解决Linux网络编程中的客户端并发连接问题。poll通过struct pollfd结构体管理文件描述符事件,取消了select的1024个fd限制,简化了事件集合管理,避免了每次调用时重新设置事件。文章详细展示了基于poll的TCP服务器实现,包括初始化、事件注册和事件处理循环,并提供了IO和HTTP两种服务回调函数。性能测试对比表明,poll在高并发场景下表现优于多进程/多线程方案,但和select效率相近,仍存在频繁内核拷贝和线性扫描的性能瓶颈
2025-11-21 21:35:25
1306
原创 从零构建高性能KV存储服务器:架构设计与实现细节
本项目实现了一个类似Redis的KV存储服务器,采用C++开发,主要特点如下: 架构设计: 采用Reactor模式+epoll ET模型实现高并发网络框架 模块化设计分为网络层、协议解析层和存储引擎层 支持多端口监听,单机最高支持2.8万并发连接 核心功能: 实现SET/GET/DEL/MOD/SIZE等基础KV操作 支持多种存储引擎:哈希表、红黑树、数组、LRU缓存 自定义协议处理TCP粘包问题 性能表现: QPS达到3.5万(SET/GET混合) 内存占用优化,支持千万级数据存储 通过策略模式实现存储引
2025-11-20 00:05:42
2002
原创 C/C++ Linux网络编程5 - 网络IO模型与select解决客户端并发连接问题
本文介绍了使用IO多路复用技术select()实现TCP服务器并发处理的方案。首先分析了五种网络IO模型(阻塞/非阻塞/信号驱动/IO多路复用/异步IO)的特性,重点阐述了select()系统调用的原理和参数设置。通过修改tcpServer类中的run()方法,实现基于select()的IO多路复用服务端核心逻辑:利用fd_set位图监控多个文件描述符,在有事件就绪时处理连接请求或数据读写。性能测试显示select服务器QPS达15,965,远优于多线程/多进程方案,但存在1024连接数限制、线性扫描所有f
2025-11-17 22:45:31
949
原创 C/C++ Linux网络编程4 - 解决TCP服务器并发的方式
本文介绍了两种实现TCP服务器并发处理的方法:多进程和多线程。通过fork()创建子进程管理客户端连接,并采用"孙子进程"策略避免僵尸进程问题;同时演示了使用C++11线程库实现多线程服务器的方式。文章提供了完整的代码实现,包括socket初始化、HTTP响应处理等核心功能,并通过网络调试工具和wrk性能测试对比了两种方案的效率。测试结果表明多线程方式在并发性能和资源消耗方面表现更优,同时文章也指出了高并发场景下服务器可能面临的稳定性问题。
2025-11-14 21:53:28
1330
1
原创 C/C++ Linux网络编程3 - Socket编程与TCP服务器客户端
本文介绍了TCP服务器与客户端的Socket编程实现。主要内容包括:1. TCP核心API:listen()设置监听队列,accept()接收连接,connect()发起连接,以及recv()/send()数据传输接口;2. TCP服务器实现步骤:创建socket、bind绑定、listen监听、accept接收连接,并通过回调函数处理IO;3. TCP客户端实现:connect连接服务器后直接通信;4. 测试示例展示了基本的客户端-服务器通信功能,并解决了连接关闭时的异常处理问题。与UDP不同,TCP需要
2025-11-13 21:55:50
1337
原创 C/C++ Linux网络编程2 - Socket编程与简单UDP服务器客户端
摘要:本文介绍了Linux下UDP网络编程的基础知识,重点讲解了Socket编程API和结构体的使用方法。文章详细说明了sockaddr、sockaddr_in和sockaddr_un三种结构体的区别及应用场景,并通过C++类封装实现了UDP服务端和客户端的完整代码。服务端需要绑定IP和端口,使用recvfrom接收数据;客户端则通过sendto发送数据,无需显式绑定端口。最后提供了本地回环地址127.0.0.1的测试方法,展示了完整的通信流程。
2025-11-12 15:20:23
947
原创 C/C++ Linux网络编程1- 网络编程基础
摘要:本文主要介绍了网络协议的分层设计思想,重点分析了OSI模型和TCP/IP协议栈的结构与功能。文章阐述了协议封装/解包机制,局域网类型(以太网、令牌环网、无线LAN)及路由器的工作原理。同时详细说明了IP地址、端口号在网络通信中的关键作用,对比了TCP和UDP协议的特性差异。最后解释了网络字节序(大端)与主机字节序(小端)的转换必要性,为网络编程提供了理论基础。(149字)
2025-11-10 19:03:09
951
原创 45 C++智能指针的原理与模拟实现,内存泄漏与RAII
本文详细介绍了C++智能指针的实现原理与应用场景。首先通过类模板封装基本智能指针,实现RAII机制的构造/析构函数和运算符重载。然后重点讲解了三种主要智能指针:auto_ptr(通过转移所有权)、unique_ptr(禁止拷贝)和shared_ptr(引用计数)。针对shared_ptr的线程安全问题,给出了基于互斥锁的实现方案。最后讨论了内存泄漏的危害和RAII思想的价值,指出智能指针能有效预防内存泄漏。文章提供了完整的代码示例,展示了智能指针如何安全高效地管理内存资源。
2025-11-04 23:27:33
908
原创 44 C++智能指针详解:安全高效管理内存
本文介绍了C++11中的智能指针,重点讲解了shared_ptr、weak_ptr和unique_ptr的使用。shared_ptr通过引用计数实现资源共享,但需注意循环引用问题;weak_ptr作为观察者不增加引用计数,可解决循环引用;unique_ptr是独占指针,不可拷贝但更安全。文章详细说明了三种智能指针的初始化方法、相关操作及注意事项,并对比了auto_ptr已被废弃的原因。智能指针基于RAII机制,能有效防止内存泄漏,提高内存管理安全性。
2025-11-03 01:16:44
977
原创 43.C++11-lambda表达式的使用
摘要: 本文介绍了C++11中的lambda表达式,重点解析其格式、捕捉列表及使用场景。lambda表达式本质是一个匿名函数,格式为capture-listmutable->return-type{statement},支持值捕捉和引用捕捉外部变量。通过示例展示了lambda作为普通函数和STL排序比较器的用法,并分析其底层原理(仿函数实现)。最后讨论了lambda表达式的拷贝问题,指出其可拷贝性取决于捕捉对象的拷贝属性。
2025-11-02 21:18:18
816
原创 Linux操作系统7- 线程同步与互斥7(RingQueue环形队列生产者消费者模型改进)
Linux操作系统中,环形队列RingQueue的进一步使用,以及通过两个互斥锁保护生产者之间的互斥与消费者之间的互斥
2025-03-25 20:10:26
1136
原创 Linux操作系统7- 线程同步与互斥6(POSIX信号量与环形队列生产者消费者模型)
Linux操作系统中信号量的使用与RingQueue环形队列实现生产者消费者模型
2025-03-24 22:24:45
1086
原创 Linux操作系统7- 线程同步与互斥5(POSIX条件变量生产者消费者模型的进一步使用)
Linux中生产者消费者模型的进一步使用,包含处理结构体数据,三线程两队列模型,多生产多消费模型
2025-03-23 19:14:12
994
原创 Linux操作系统7- 线程同步与互斥4(基于POSIX条件变量的生产者消费者模型)
Linux中使用条件变量和互斥锁实现BlockQueue阻塞队列的生产者消费者模型
2025-03-22 15:16:40
1512
原创 Linux操作系统7- 线程同步与互斥3(POSIX条件变量的使用,线程循环打印数字)
Linux操作系统中条件变量的使用,完成线程之间的同步与互斥
2025-03-21 16:11:47
1157
原创 Linux操作系统7- 线程同步与互斥2(互斥锁的原理,死锁的概念与守卫锁的使用)
Linux中互斥锁的原理与CAS,死锁的概念与基于RAII的lockguard的封装与使用
2025-03-20 14:29:17
1111
原创 36.C++哈希1(STL中unordered_set/unordered_map的使用)
C++STL无序序列式容器unordered_set/unordered_map的使用
2025-03-17 21:46:54
1023
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅