我用 AI 写了一个 Redis 桌面工具,从 0 到 v0.3 只花了一天
先说结论
这篇文章讲两件事:
-
1. 我做了什么:一个叫 Seven Redis Nav 的 macOS 原生 Redis 可视化管理工具,现在已经开源 -
2. 我怎么做的:用 AI 辅助开发,配合一套叫 OpenSpec 的工作流,从零到功能完整只花了一天
如果你是 Redis 用户,可以直接去 GitHub 下载用;如果你对”AI 怎么帮我写代码”更感兴趣,这篇文章的后半段是重点。
一、这个工具是什么
Seven Redis Nav 是一款基于 Tauri 2 + Vue 3 + Rust 构建的 macOS 原生 Redis 可视化管理工具。
先上功能清单:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
技术栈:
-
• 桌面框架:Tauri 2 -
• 前端:Vue 3 + TypeScript + TDesign Vue Next -
• 后端:Rust(redis-rs + tokio 异步) -
• 存储:SQLite + macOS Keychain -
• 测试:Vitest + Playwright
为什么选 Tauri 而不是 Electron?包体积。Tauri 打出来的 .dmg 比 Electron 小 10 倍以上,而且用的是系统原生 WebView,内存占用也更低。

二、开发过程:4 个阶段,1 天完成
这是最有意思的部分。
整个项目我用了一套叫 OpenSpec 的 AI 辅助开发工作流,把开发过程拆成了 4 个 Phase,每个 Phase 都有明确的目标和交付物。
Phase 0:工程脚手架(”让它能跑起来”)
目标只有一句话:克隆仓库后,5 分钟内能启动应用,点一个按钮,对真实 Redis 发出 PING 并收到 PONG。
这个阶段不交付任何用户可见的业务功能,只建立工程基线:
-
• Tauri 2 + Rust 后端骨架(commands / services / models / utils 四层) -
• Vue 3 + TypeScript strict + Vite 前端骨架 -
• 应用主窗口外壳(Titlebar / Toolbar / Sidebar / KeyPanel / Workspace / Statusbar 六大区域) -
• 端到端 IPC 闭环: connection_test(host, port, password?) → PingResult -
• 工程化基线:ESLint + Prettier + cargo clippy + Conventional Commits + GitHub Actions CI
为什么要单独做 Phase 0?
因为如果工程基线没打好,后续每个特性都要踩重复的坑。Phase 0 结束后,所有后续 Phase 都可以基于同一套 IPC 契约、错误模型、目录结构平行展开。
Phase 1:MVP(”让它能用”)
目标:实现连接持久化、键浏览、5 种数据类型查看、CRUD 操作和 CLI 终端,达到 v0.1 可用状态。
这一阶段的核心挑战是连接管理:
-
• 连接配置存 SQLite,密码存 macOS Keychain(不能明文存!) -
• 建立 ConnectionMultiplexer连接池,支持 DB 切换 -
• SCAN 分页游标管理,支持 pattern 搜索和类型筛选 -
• 5 种数据类型查看器(String / Hash / List / Set / ZSet) -
• CLI 终端:命令历史 + RESP 输出着色 + 危险命令二次确认
一个有意思的细节:虚拟滚动。当 Redis 里有 10 万+ Key 时,普通列表渲染会直接卡死。我用了 @tanstack/vue-virtual 做虚拟滚动,只渲染可视区域内的 Key,滚动依然丝滑。
Phase 2:功能完善(”让它好用”)
目标:把 Toolbar 里那些”占位”的 Tab 全部实现,对应 v0.2。
-
• Pub/Sub 工作区:实时消息流,支持 pattern 订阅,消息过滤/暂停 -
• Slowlog 工作区:SLOWLOG GET 数据表格展示,按耗时排序,支持 RESET -
• Monitor 工作区:MONITOR 命令实时流,命令着色(读/写/管理),性能保护(缓冲区上限) -
• Server Config 工作区:CONFIG GET/SET,分组展示,INFO 概览面板 -
• SSH 隧道 + TLS 加密:这两个是这个阶段最复杂的部分
SSH 隧道的实现用了 ssh2-rs,TLS 用了 native-tls。难点在于:SSH 隧道需要在本地起一个端口转发,然后 Redis 客户端连本地端口,整个过程要在 Rust 异步运行时里正确管理生命周期。
Phase 3:扩展类型(”让它专业”)
目标:支持 Stream / Bitmap / HyperLogLog 等非典型数据结构,以及 JSON 智能识别,对应 v0.3。
这一阶段最有意思的是 JSON 智能识别:
当你查看一个 String 类型的 Key,如果它的值是合法 JSON,应用会自动切换到 CodeMirror 6 JSON 编辑器,带语法高亮、代码折叠、搜索和美化/压缩按钮。如果不是 JSON,就回退到纯文本。
二进制三视图也很实用:当 String / Hash 字段 / List 元素内容探测为二进制时,提供 Hex / Base64 / 文本 三个切换视图。
三、OpenSpec 工作流:AI 辅助开发的方法论
说完做了什么,来说说怎么做的。
这套工作流的核心思想是:把”想清楚”和”写代码”分开。
工作流的四个步骤
Explore(探索)→ Propose(提案)→ Apply(实施)→ Archive(归档)
1. Explore(探索)
在动手写代码之前,先和 AI 一起把问题想清楚:
-
• 这个功能要解决什么问题? -
• 有哪些技术方案?各自的 trade-off 是什么? -
• 有哪些风险?
这一步的产出是一份思路文档,不是代码。
2. Propose(提案)
基于探索结果,生成一份完整的变更提案,包含:
-
• proposal.md:Why / What Changes / Capabilities / Impact -
• design.md:技术决策(Decisions)、风险(Risks)、迁移计划(Migration Plan) -
• tasks.md:拆分成具体的实施任务,每个任务有明确的验收标准
3. Apply(实施)
按照 tasks.md 逐一实施,AI 帮你写代码,你负责 review 和调试。
关键点:每个任务都有明确的验收标准,不是”写完就行”,而是”写完后跑测试,覆盖率 ≥ 70%”。
4. Archive(归档)
Phase 完成后,把所有文档归档到 openspec/changes/archive/ 目录,形成项目的”决策日志”。
为什么这套流程有效?
传统的 AI 辅助开发有一个常见问题:AI 生成的代码质量参差不齐,而且很难维护。
根本原因是:AI 不知道你的项目上下文,不知道你的技术决策,不知道你的代码规范。
OpenSpec 的解法是:把上下文显式化。
每个 Phase 的 design.md 里都有明确的技术决策(D1、D2、D3…),每个决策都有理由和替代方案。这样 AI 在生成代码时,就有了足够的上下文,不会乱来。
举个例子,Phase 4 的 D2 是这样写的:
D2:多 Tab CLI 的会话管理策略
决策:每个 CLI Tab 持有独立的 Redis 连接,通过
HashMap<TabId, CliSession>管理。理由:CLI 可能执行阻塞命令(如
SUBSCRIBE、BLPOP),独立连接避免阻塞其他 Tab。替代方案:共享连接 + 命令队列,但实现复杂且无法支持阻塞命令。
有了这份文档,AI 生成的代码就不会用错误的方案,也不会在 review 时让你困惑”为什么这么写”。
四、一些有意思的技术细节
macOS Keychain 集成
密码不能明文存 SQLite,这是基本的安全常识。
我用了 security-framework crate 把密码存到 macOS Keychain。有一个坑:Keychain 在某些情况下会弹出两次授权弹窗(一次读、一次写),用户体验很差。
解决方案是:在 Tauri 的 capabilities 配置里正确声明权限,并且在 Rust 侧用 SecKeychainItem 的 update 方法替代先删后写,避免触发两次授权。
MONITOR 命令的背压控制
MONITOR 命令会把 Redis 服务器上的所有命令实时推送给客户端,在高 QPS 场景下,推送速度可能超过前端渲染速度。
解决方案:
-
• 后端设置缓冲区上限(默认 10000 条),超出后丢弃旧消息 -
• 前端用 requestAnimationFrame批量渲染,避免每条消息都触发 DOM 更新 -
• 提供”暂停”按钮,暂停时后端停止推送
虚拟滚动 + SCAN 游标
Key 浏览器的实现是两层懒加载:
-
1. SCAN 游标:Redis 的 SCAN 命令每次返回一批 Key(默认 100 个),通过游标分页 -
2. 虚拟滚动:前端只渲染可视区域内的 Key,滚动到底部时触发下一次 SCAN
这两层配合,可以流畅浏览百万级 Key 的 Redis 实例。
五、下一步:v0.4 规划
Phase 4(v0.4)正在开发中,主要新增:
-
• Lua 脚本编辑器:CodeMirror 6 + Lua 语法高亮,支持 EVAL/EVALSHA 执行 -
• 大 Key 扫描器:后台异步任务,SCAN + MEMORY USAGE 抽样,生成 Top 100 大 Key 报告 -
• 健康检查报告:综合 INFO / SLOWLOG / Keyspace 数据,生成可导出的 Markdown 健康报告 -
• 多 Tab CLI:⌘T 新开 CLI 标签页,每个 Tab 独立连接与历史 -
• 数据导入导出:JSON 格式导出/导入,只读解析 RDB 文件 -
• 数据脱敏:配置 key pattern → 掩码规则,Browser Workspace 实时生效
六、开源地址
项目已在 GitHub 开源,MIT 协议:
GitHub:
github.com/qwzhang01/seven-redis-nav
欢迎 Star、提 Issue、提 PR。
如果你在用 Redis,试试看,有问题直接在公众号留言找我。
夜雨聆风