分类: C++构建自己的Redis

线程池 [第十四节]

14.1 多线程的需求 事件循环假定循环中的所有操作都能快速完成,因此禁止阻塞式IO。然而,仍然存在一些问题: 1. 使用阻塞式IO的第三方代码。 2. 会使事件循……

基于生存时间(TTL)的缓存过期机制 [第十三节]

13.1 生存时间 缓存过期方法 在许多应用程序中,数据库访问并不是均匀的;很大一部分请求会反复访问一小部分数据。这一小部分热数据可以从缓存中获取,以提高……

定时器与超时 [第十二节]

12.1 定时器的需求 在Redis服务器中,定时器有许多用途: 1. 生存时间(TTL)和缓存过期。 2. 网络IO超时。 3. 关闭空闲连接。 缓存过期 TTL常用于缓存,原……

有序集合 [第11节]

11.1 有序集合接口 三种查询类型 有序集合是一组已排序的(分数,名称)对的集合。真正的Redis有许多有序集合命令,但它们本质上只是以下三种查询类型的接口……

平衡二叉树 [第十节]

10.1 用于排序的有序集合 有序集合是一个由已排序的(分数,名称)对组成的集合。 std::set<std::pair<double, std::string>> by_score; 一个明……

数据序列化 [第九节]

9.1 序列化的必要性 到目前为止,响应都是一个字符串,但一些Redis命令会返回其他数据类型。例如,dbsize命令返回的键的数量是一个整数,keys命令返回一个字……

哈希表(第 2 部分) [第八节-2部分]

8.6 固定大小的链地址法哈希表 我们将实现过程分为两个阶段: 1. 使用侵入式链表的固定大小哈希表。 2. 带有渐进式重新哈希的可调整大小哈希表。 源代码在……

哈希表 [第八节]

让我们替换掉上一章中用作占位符的映射。前置知识:基本数据结构、大O表示法。 8.1 哈希表快速回顾 键值对的数据结构 用于键值对存储的数据结构有两类: 1. ……

键值服务器 [第七节]

7.1 请求 - 响应消息格式 从当前的协议开始,让我们把 “msg” 部分替换成有实际意义的内容:一个仅支持 get、set、del 命令的键值对存储系统。 ┌─────┬──────┬……

事件循环(第 2 部分) [第六节-2部分]

6.5 事件循环基础 我们在上一章学到的内容: • 基于回调的编程:对事件做出反应,而不是阻塞线程。 • 使用非阻塞IO处理输入:将数据保存在缓冲区中,直到有……