全部章节,按阅读顺序排列。每一篇都是仓库里的一个 markdown 文件 —— 你在这里读到的和 GitHub 上显示的是同一份文字。
习惯了想表,现在要学着想键。
能直接跑的配方:会话、限流、队列、排行榜、信息流。
append-only 日志、快照,以及 kill -9 之后还剩下什么。
shard、连接数,以及真正有用的那两个开关。
HRANDFIELD、能在线上设的 keyspace 事件开关、四处 RESP3 形状,以及一条修正过的 GEOPOS 回复。
服务器什么都没变;两个客户端 crate 终于以引擎的版本号到达 crates.io。
停 5.1、在同一目录起 5.2 —— Lua 方言与上游对齐。
停 5.0、同目录启 5.1——修掉一个读取隐患,去掉两处停顿。
停 4.1.1、同目录启 5.0——以及哪些行为变了。
更早的大版本:2.x 到 3.x,以及 3.x 到 4.0。
一主 N 从,还有那个不会骗人的 offset。
failover、epoch,以及我们不承诺保住的那些写。
为什么没有 cluster,以及该怎么办。
给 store 一个 RAM 预算,数据大过 RAM——冷值下沉到磁盘,每条命令不变。
一个开关,把 listener 交给更少的核,换来 10.6%。
可选分配器:RSS 省约 10%,代价照实标价。
Unix socket:没有 TCP、没有回环、没有内核拷贝。
pipelining,以及这个引擎为什么没有 async runtime。
二级索引:怎么建起来的,代价是多少。
类型化列和索引声明一次,然后像查表一样查——kevy 的速度。
从手工索引迁过来的八课——每一课都在生产上付过学费。
在你的键空间上做 KNN。不含 embedding 模型。
BM25 全文检索,以及它到哪儿为止。
物化视图,由写路径顺手保持新鲜。
一条变更流,别的进程可以 tail 它。
频道、模式,以及订阅者跟不上时会发生什么。
EVAL —— 跑在我们自己写的解释器上。
声明过的行存成一次分配,以及决定它到底省不省的那个顺序。
浏览器标签页里的 151 KB,持久化到 OPFS。
嵌进去,同时还能在 socket 上讲 RESP。
no_std、没有分配器、没有操作系统。
kevy 拒绝什么、为什么、改用什么——在你据此动工之前先读。
每一条错误字符串,以及它属于哪份契约。
关系型负载在这里到底要付多少钱 —— 照实说。
从 Redis 搬进来,以及再搬出去。
引擎能回答的每一条动词,由它分发所用的那张表生成。