kevy
文档

文档

全部章节,按阅读顺序排列。每一篇都是仓库里的一个 markdown 文件 —— 你在这里读到的和 GitHub 上显示的是同一份文字。

上手

在 kevy 上设计应用

习惯了想表,现在要学着想键。

RDS→kevy 建模 cookbook

能直接跑的配方:会话、限流、队列、排行榜、信息流。

持久化

append-only 日志、快照,以及 kill -9 之后还剩下什么。

调优 kevy

shard、连接数,以及真正有用的那两个开关。

运行

从 6.2 升级到 6.3

HRANDFIELD、能在线上设的 keyspace 事件开关、四处 RESP3 形状,以及一条修正过的 GEOPOS 回复。

从 6.2.0 升级到 6.2.1

服务器什么都没变;两个客户端 crate 终于以引擎的版本号到达 crates.io。

从 5.1 升级到 5.2

停 5.1、在同一目录起 5.2 —— Lua 方言与上游对齐。

从 5.0 升级到 5.1

停 5.0、同目录启 5.1——修掉一个读取隐患,去掉两处停顿。

从 4.x 升级到 5.0

停 4.1.1、同目录启 5.0——以及哪些行为变了。

更早的大版本升级

更早的大版本:2.x 到 3.x,以及 3.x 到 4.0。

复制

一主 N 从,还有那个不会骗人的 offset。

可用性

failover、epoch,以及我们不承诺保住的那些写。

集群

为什么没有 cluster,以及该怎么办。

透明分层存储([tiering] / with_tier_budget*)

给 store 一个 RAM 预算,数据大过 RAM——冷值下沉到磁盘,每条命令不变。

--accept-shards N——把稀疏连接收拢到部分 shard 上

一个开关,把 listener 交给更少的核,换来 10.6%。

kevy-alloc——可选分配器:它买到什么、代价是什么

可选分配器:RSS 省约 10%,代价照实标价。

Unix-domain socket(UDS)传输

Unix socket:没有 TCP、没有回环、没有内核拷贝。

异步客户端

pipelining,以及这个引擎为什么没有 async runtime。

数据

二级索引(IDX.* / idx_*)

二级索引:怎么建起来的,代价是多少。

表(TABLE.* / table_*)

类型化列和索引声明一次,然后像查表一样查——kevy 的速度。

从手工维护的索引迁移到表

从手工索引迁过来的八课——每一课都在生产上付过学费。

向量检索(KIND ann)

在你的键空间上做 KNN。不含 embedding 模型。

全文检索(KIND text)

BM25 全文检索,以及它到哪儿为止。

视图(VIEW.* / view_*)

物化视图,由写路径顺手保持新鲜。

CDC——变更流(FEED.* / changes_since)

一条变更流,别的进程可以 tail 它。

Pub/sub

频道、模式,以及订阅者跟不上时会发生什么。

Lua 脚本

EVAL —— 跑在我们自己写的解释器上。

packed-rows——把声明过的行存成一次分配

声明过的行存成一次分配,以及决定它到底省不省的那个顺序。

嵌入

kevy 上 WebAssembly

浏览器标签页里的 151 KB,持久化到 OPFS。

Embedded 只读 RESP listener

嵌进去,同时还能在 socket 上讲 RESP。

kevy 跑在 IoT 设备上

no_std、没有分配器、没有操作系统。

客户端

参考

kevy 不做什么

kevy 拒绝什么、为什么、改用什么——在你据此动工之前先读。

错误回复目录

每一条错误字符串,以及它属于哪份契约。

在 kevy 上跑 RDS 负载

关系型负载在这里到底要付多少钱 —— 照实说。

迁移——playbook 与工具链

从 Redis 搬进来,以及再搬出去。

命令参考

命令参考

引擎能回答的每一条动词,由它分发所用的那张表生成。