C++实现redis
文章平均质量分 95
一个用C++实现的Redis-like键值存储系统,支持基本的键值操作、网络通信和高级数据结构。本项目从零开始构建,实现了Redis的部分核心功能。
AuroBreeze
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Redis C++ 实现笔记(I篇)
Redis C++ 实现笔记(I篇)摘要 本文主要讲解如何在C++中实现Redis的多线程机制,重点解决阻塞I/O和CPU密集型任务问题。文章介绍了线程池的实现,包括: 使用互斥锁和条件变量保证线程安全 生产者-消费者模式处理任务队列 将大型ZSet删除操作放入后台线程执行 关键点: 通过Work结构体封装任务函数和参数 worker线程使用while循环避免虚假唤醒 任务执行放在锁外减少锁持有时间 线程池初始化和管理任务队列 实现方法有效解决了Redis在处理大数据结构时的性能瓶颈问题。原创 2025-09-11 20:56:40 · 872 阅读 · 0 评论 -
Implementing Redis in C++ : C
本文实现了基于C++的自定义Redis键值存储系统,主要优化包括: 使用自定义哈希表HMap替代std::map,提高查询性能 采用渐进式rehash机制,避免扩容时的性能抖动 实现FNV哈希算法,提供更好的键值分布性 优化内存管理,减少内存碎片 系统采用侵入式链式哈希表设计,通过偏移量计算实现高效节点访问。主要数据结构包括HNode、HTab和HMap,其中HMap同时维护新旧两个哈希表用于平滑扩容。通过位运算优化索引计算,使用calloc确保内存清零初始化。原创 2025-08-21 14:21:13 · 641 阅读 · 0 评论 -
Implementing Redis in C++ : E(AVL树详解)
本文介绍了在C++中实现Redis数据结构时使用AVL树的方法。主要内容包括: AVL树的特点:严格平衡的二叉搜索树,保证任意节点左右子树高度差不超过1,查找效率稳定在O(logN) 树形数据结构的基本概念:节点、根节点、父节点、子节点、兄弟节点、叶子节点、高度、深度等 不平衡二叉树的问题:当插入顺序不当时,树可能退化成链表,导致查找效率降为O(N) AVL树的旋转操作:通过左旋和右旋调整树结构,保持平衡性而不改变中序遍历的有序性 旋转操作的具体实现:详细讲解了左旋和右旋的代码实现,并解释了为何选择特定节点原创 2025-08-24 19:58:56 · 390 阅读 · 0 评论 -
Redis C++ 实现笔记(F篇)
《Redis C++实现笔记(F篇)》摘要:本文延续Redis C++实现系列,重点讲解有序集合(ZSet)相关命令的实现。作者基于前文实现的AVL树和哈希表(HMap)结构,新增了zadd、zrem、zscore、zquery等Redis-like命令。关键数据结构包括:ZSet(包含AVL树和HMap双重索引)、ZNode(同时作为树节点和哈希节点)。通过图示展示了数据结构的层次关系,包括g_data→db→HMap→HTab→Entry→ZSet的完整存储路径。实现时利用AVL树维护(score,na原创 2025-09-04 23:33:46 · 780 阅读 · 0 评论 -
Implementing Redis in C++ : A
Redis C++实现摘要 本文介绍了在C++中实现Redis服务器的基础套接字编程部分。重点包括: Windows平台下需要初始化Winsock环境(WSAStartup/WSACleanup) 创建socket并设置地址结构(sockaddr_in),注意字节序转换(htons/htonl) 端口复用设置(setsockopt)及socket绑定监听(bind/listen) 内存布局分析:sockaddr通用结构与sockaddr_in等具体结构的关系 错误处理机制(die/msg函数)和套接字非阻塞原创 2025-08-18 13:57:30 · 820 阅读 · 0 评论 -
Implementing Redis in C++ : B
本文介绍了如何在C++中实现Redis的键值存储功能,通过构建非阻塞网络通信和自定义协议格式。文章重点讲解了数据解析部分,包括读取32位整数(read_u32)、字符串(read_str)和请求解析(parse_req)的实现细节。此外,还详细说明了命令处理(do_request)的核心逻辑,包括get、set、del三种基本操作的使用方法。整个系统采用map结构存储键值对,通过自定义的二进制协议与客户端进行通信,为后续扩展Redis功能奠定了基础。原创 2025-08-19 18:12:56 · 1023 阅读 · 0 评论 -
Redis C++ 实现笔记(G篇)
Redis C++ 实现笔记(G篇)摘要 本文继续探讨Redis C++实现,重点介绍客户端空闲超时机制的设计。通过双端队列和哨兵节点实现连接状态管理,使用单调时钟记录活跃时间。详细讲解了连接节点的插入、删除操作原理,并分析为何使用哨兵节点能简化双端队列操作。通过图示展示了节点删除和插入的具体过程,帮助理解连接超时机制的核心实现思路。原创 2025-09-07 14:30:29 · 684 阅读 · 0 评论 -
Implementing Redis in C++ : D
本文介绍了在C++中实现Redis的TLV协议格式优化,主要改进包括: 采用TLV(Type-Length-Value)二进制协议格式,支持更高效的数据传输和更丰富的类型系统 实现了6种数据类型支持:nil、错误、字符串、64位整数、双精度浮点数和数组 优化了响应序列化机制,使用TLV格式替代简单的状态码+数据格式 新增了hashtable的遍历功能hm_foreach(),支持keys命令查询所有键 详细解释了TLV协议的优势和实现方式,包括自描述性、错误检测等特性 文章重点阐述了服务器端消息发送和客户端原创 2025-08-22 19:14:05 · 403 阅读 · 0 评论 -
Redis C++ 实现笔记(H篇)
这篇文章介绍了如何在C++中实现Redis的键过期机制,主要思路是使用小顶堆数据结构来高效管理键的过期时间。小顶堆能以O(1)时间复杂度获取最近要过期的键,插入和删除操作的时间复杂度为O(logN)。文章对比了数组和指针实现小顶堆的优劣,解释了为什么数组存储更优,并展示了相关数据结构的关系图。此外,还新增了两个命令:pexpire(设置毫秒级过期时间)和pttl(查询剩余过期时间)。文章是系列文章的一部分,主要关注与之前实现的不同之处。原创 2025-09-09 23:22:19 · 652 阅读 · 0 评论
分享