分类: 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处理输入:将数据保存在缓冲区中,直到有……