kividbio/kividb

数据

用 Rust 编写、兼容 Redis 的内存键值数据库,内置全文与向量检索。

784
23
Rust
AGPL-3.0
创建于 12 天前

KiviDB 是一个兼容 Redis 协议(RESP2 与 RESP3)的内存键值数据库,现有 Redis 客户端和 redis-cli 只需改端口即可连接。它面向已在运行 Redis 或 Valkey、希望利用多核吞吐并内置检索能力而不另挂搜索模块的团队。项目采用 AGPL-3.0 许可,另提供商业授权。

做什么

服务端把键分散到所有核心上,用细粒度锁保护,并通过快照或可选的追加日志持久化。由于直接讲 RESP 协议,迁移主要是改客户端配置:默认监听 6380 端口,可与 6379 上的 Redis 并行运行;迁移指南和兼容性文档说明了具体差异 迁移指南、兼容性说明、支持的命令。

检索是内置的:Redis Stack 风格的 FT.* 命令覆盖 BM25 全文、标签与数值过滤,以及基于 hash 字段的 FLAT 或 HNSW 向量 ANN 检索。向量以小端 FLOAT32 原始字节存储,与 Redis Stack 和 redis-py 的约定一致,原有建索引代码大多可直接沿用。

持久化与重启

原生 dump.kdb 快照保存键、索引 schema,如果在索引已有数据时执行保存,还会保存各向量字段的 HNSW 图,因此重启后的检索质量与关闭前一致,而不必从 hash 重建。启动时重建索引期间,多数命令返回 LOADING,PING、INFO 等少数命令仍可用。大规模写入后文档建议执行 SAVE 或安排 BGSAVE,让下次启动直接读盘。启用 AOF 时,崩溃最多丢失约最后一秒的写入;存在 AOF 时它以 AOF 为准,不再加载快照 持久化说明。

要求与限制

  • 构建按 feature 区分。 默认版本不含 Lua 脚本和 TLS;没有 lua feature 时 EVAL 等命令直接报错,非 TLS 版本收到 --tls-port 会拒绝启动而不是降级为明文。Docker 标签和发布包按变体分别提供 README。
  • 从源码构建需要 stable Rust,最低经 1.89 验证。 Linux 在内核允许时使用 io_uring,否则回退 Tokio;Docker 默认 seccomp 配置会阻断 io_uring,容器内通常走回退路径,除非放宽该配置。
  • 默认开启 protected mode 保护。 未设置 bind 地址或密码时,只有本机回环客户端能连接,其他客户端收到 -DENIED。Docker 镜像默认关闭该保护,而你传入的任何参数都会替换该默认命令,覆盖时需要显式设密码或重新关闭保护 protected mode。
  • 启动更新检查会向 GitHub releases 页面发出一次 HTTPS 请求,只带 kividb/<版本> 的 User-Agent;可通过参数、配置或环境变量关闭,debug 构建不执行 更新检查文档。

性能数据

公开数字来自 2026 年 10 月一次受控测试,环境为 AWS Graviton3,服务端限制在 32 核,各引擎依次单独运行:流水线 GET 达 2120 万次/秒,Dragonfly 为 910 万,Redis 8.10 为 240 万。非流水线场景则略低于 Dragonfly(GET 307 万对 335 万次/秒)。向量检索在较低 ef 下领先,但 ef 512 时落后于 Dragonfly,写入与建索引也更慢。README 自己说明这只是一次受控采集、并非保证,建议用户在自己的硬件和负载上实测 基准测试。

许可

AGPL-3.0-only:通过网络调用未修改的 KiviDB 不使你的应用受该许可约束;但修改 KiviDB 并对外提供该修改版时,需要公开修改内容;无法接受该条款的组织可申请商业授权 许可说明。

本文由 AI 根据项目 README 生成,更新于 2026年10月28日,以项目官方文档为准。

Hacker News 讨论

Show HN: KiviDB, a faster Redis-compatible memory database and vector cache
▲ 69 · 44 条评论 · 2026年10月19日