EN·日本語·简体中文

纯 Rust、零依赖、Redis 兼容的 serving engine。

一个引擎,三种形态:独立服务器、进程内 Rust 库、以及在浏览器里运行的 WebAssembly 模块。每种形态都讲 RESP2 —— redis-cli 和所有 Redis 客户端库 无需修改即可使用。

安装
# 服务器
cargo install kevy
# 容器
docker run --rm -p 6379:6379 goliakk/kevy:latest
# 浏览器
npm i @goliajp/kevy
实测 · 四方对打

用测量说话,不用口号。

1.60×redis 8 (GET)
3.00×valkey 9.1 (GET)
3.60×dragonfly (GET)
server配置GET ops/sSET ops/s相对值 (GET)
kevy 3.18.0 --threads 8, io_uring 6,389,776 ±2.8k 6,384,676 ±582k
redis 8 (8.4.x) --io-threads 8 3,996,004 ±198k 2,460,024 ±112k
valkey 9.1 --io-threads 8 2,132,196 ±68k 1,598,402 ±0.1k
dragonfly (2025-06) --proactor_threads=8 1,776,199 ±42k 1,453,224 ±28k

协议:redis-benchmark -c 50 -P 16 -n 8M -t get,set, 5 次运行取中位数 ± 样本标准差。同一台机器(i7-10700K,8C16T,Linux 6.12) 公平对打:服务器绑核 0–7,基准客户端绑核 8–15;所有服务器用同一客户端、 同一协议、同一机器测得。 复现见 bench/arena.sh, 完整分解见 bench/PERF-DECOMP-V4-T9.md

能力 · 同一引擎

下层 Redis 对等,上层 serving engine。

Redis 兼容 KVRESP2 线协议;98 条命令的应答与 valkey 9.1 逐字节核对。字符串、哈希、列表、集合、有序集合、TTL。
声明式索引范围 / 唯一二级索引在写路径上维护 —— 永不漂移、可从数据重建,并带一跳 hydration(IDX.*)。
CJK 全文检索免词典的 CJK bigram 切分 + BM25 排序,作为一种索引 —— 同一查询面、同一 hydration。
向量检索HNSW ANN 索引,外加服务端混合检索:一条查询完成 BM25 × KNN 融合。
CDC feed(generation, offset) 位点与精确恢复点的变更流 —— 内建的 outbox。
复制与故障切换带心跳 / ACK 真实滞后的流式复制、计划内零丢失交棒(FAILOVER)、quorum 崩溃选举。
一致性阶梯按请求粒度可选:WAIT、read-your-writes token、bounded staleness、quorum 围栏写。
MCP 服务器官方 kevy-mcp:面向 AI agent 的 stdio JSON-RPC,schema 与 COMMAND DOCS 出自同一动词契约。
WebAssembly浏览器里的引擎(@goliajp/kevy):OPFS / IndexedDB 持久化、跨 tab pub/sub、零依赖。
嵌入式与 IoTkevy-embedded 按 feature 裁剪至最小 KV+TTL 内核;musl / ARM 交叉编译与体积 / RSS 预算门禁常驻 CI。
在线演示 · WebAssembly

现在,就在这个浏览器里跑 kevy。

演示会把真实引擎作为约 420 KB 的 wasm 模块 载入:浏览器 API 之上的命令行 REPL、刷新后依然还在的 OPFS 持久化(IndexedDB 兜底)、跨 tab 的 pub/sub。没有后端,数据 不出你这台机器。

打开在线演示 →