Beekeeper Studio 连接 Redis 完全指南:ACL 认证、TLS/SSH 与 ReJSON 支持
【免费下载链接】beekeeper-studioModern and easy to use SQL client for MySQL, Postgres, SQLite, SQL Server, and more. Linux, MacOS, and Windows.项目地址: https://gitcode.com/GitHub_Trending/be/beekeeper-studio
导读
本指南基于 Beekeeper Studio 官方用户手册与仓库源码,完整讲解如何通过图形界面连接 Redis 实例。你将掌握连接表单中每个字段的含义与默认值、Redis 6+ ACL 用户名认证的正确填写方式、TLS/SSL 加密连接与 SSH 隧道两种安全通道的使用场景,以及 ReJSON 模块下 JSON 文档的浏览与编辑能力。同时结合 Redis 客户端实现 的源码细节,帮助你理解 Beekeeper Studio 底层是如何与 Redis 通信的。
连接 Redis 的基本步骤
在 Beekeeper Studio 中连接 Redis 非常直接:新建连接时,从连接类型(Connection Type)下拉框中选择Redis,填写连接信息后点击Connect即可完成连接。仓库中 Redis 的方言定义(apps/studio/src/shared/lib/dialects/redis.ts)为该类型专门配置了 Redis 命令编辑器模式(text/x-redis),连接后即可开始操作。
连接表单本身复用了所有数据库通用的服务器输入组件(apps/studio/src/components/connection/RedisForm.vue),其核心输入项与默认值如下:
| 字段 | 说明 | 默认值 |
|---|---|---|
| Host | Redis 服务器的 IP 地址或主机名 | 127.0.0.1 |
| Port | Redis 服务器监听的端口 | 6379 |
| Username | Redis 用户名(可选,Redis 6+ 配合 ACL 使用) | 空 |
| Password | Redis 密码(可选) | 空 |
| Database | 目标数据库编号 | 0 |
端口默认值6379在源码中有多处印证:连接模型 saved_connection.ts 中redis类型的默认端口为6379,客户端注册表 clients/index.ts 中同样声明了defaultPort: 6379以及defaultDatabase: '0'。数据库编号会直接传入底层 Redis 客户端(database: parseInt(this.database.database, 10) || 0),用于选择逻辑数据库。
用户名认证:适配 Redis 6+ 的 ACL
Redis 6 引入了访问控制列表(Access Control Lists,ACL),允许管理员创建多个拥有不同权限的用户。如果你的 Redis 服务器启用了 ACL,在连接表单中同时填写Username与Password即可。
- 使用 ACL 的 Redis 6+ 实例:同时填写用户名与密码;
- 仅使用密码认证的旧版 Redis:保持用户名为空,只填写密码。
该行为在客户端实现中完全对应:connect() 方法 创建连接时,username只在配置了用户时传入(this.server.config.user || undefined),password则始终传递。另外,客户端在连接建立后会调用HELLO握手探测服务器的 RESP 协议版本(getRespVersion(),默认按 RESP2 处理),以决定后续命令返回值的解析方式。
需要注意,Redis 官方默认配置下服务端未设置密码且仅启用默认default用户,此时用户名密码均可留空直接连接。
支持的连接特性与安全通道
连接 Redis 后,Beekeeper Studio 提供以下核心能力:
- 键(Key)的浏览与查看;
- 键值的编辑;
- 面向 Redis 命令的 AI Shell 支持;
- ReJSON 模块支持:查看与编辑存储在 Redis 中的 JSON 文档;
- SSH 隧道连接;
- TLS/SSL 加密连接。
关于能力边界,从源码可以看到真实情况:客户端注册表 clients/index.ts 中 Redis 类型禁用了server:schema、server:domain、server:ssh等特性标注,但从RedisClient.supportedFeatures()(redis.ts)的实现看,SSH 隧道与 TLS 的连接选项实际由通用连接框架提供;同时客户端明确实现了truncateAllTables()(对应FLUSHDB)与getTableLength()(对应DBSIZE)等运维操作。
注:连接表单中的 SSH 隧道与 TLS 配置项由 Beekeeper Studio 通用连接面板提供,未在 Redis 专用表单中单独实现,实际可用性以你安装版本的界面为准。
ReJSON 模块支持:JSON 文档的查看与编辑
如果你的 Redis 服务器安装了 ReJSON 模块(Redis Stack 的组成部分),Beekeeper Studio 可以显示并编辑通过JSON.SET写入的 JSON 值,且在值查看器中 JSON 数据会以语法高亮渲染。
从 fetchRedisValue() 的实现可以看到,读取 ReJSON 值时客户端调用json.get(key, { path: ["$"] })并返回路径$下的首个结果;写入时(setRedisValue()中ReJSON-RL分支)调用json.set(key, "$", value)。也就是说,ReJSON 键在查看器中与普通 string 键一样可读可改,内部自动走 JSON 模块命令。
键浏览与编辑的底层机制
把 Redis 抽象成一张"keys 表"是 Beekeeper Studio 处理 Redis 的核心设计(redis.ts):
listTables()返回一张名为keys的逻辑表;listViews()返回一张名为info的逻辑视图;keys表的列包括key、value、type、encoding、ttl、memory六列,其中type/encoding/memory为生成列,key被视为主键(getPrimaryKeys());info视图的内容来自INFO命令的输出,被解析为键值对(parseInfo())。
当你浏览表数据时,客户端会执行SCAN命令游标式遍历(scanAll()支持MATCH、COUNT、TYPE参数),随后对每个键并行调用TYPE、MEMORY USAGE、OBJECT ENCODING、TTL以及按类型取值的命令获取完整行信息。表头筛选输入框中的文本会被自动补上*通配符(selectTop()),转成SCAN ... MATCH pattern*执行,相当于 Redis 的键名模糊搜索。
针对不同数据类型,取值与写入分别映射如下:
| Redis 类型 | 读取命令 | 编辑写入命令 |
|---|---|---|
| string | GET | SET(自动尝试按 JSON 解析) |
| list | LRANGE key 0 -1 | 删除后LPUSH(注意倒序插入) |
| set | SMEMBERS | 删除后SADD |
| hash | HGETALL | 删除后逐字段HSET |
| zset | ZRANGE key 0 -1 WITHSCORES | 删除后ZADD |
| stream | XRANGE key - + | 删除后按XADD逐条追加 |
| ReJSON-RL | JSON.GET key $ | JSON.SET key $ <value> |
在结果网格中直接编辑单元格后,保存动作会触发executeApplyChanges()(redis.ts):对key列的修改转为RENAME,对ttl列的修改转为EXPIRE/PERSIST(-1表示持久化),对value列的修改则先判断现有键类型、必要时从值结构推断类型(inferTypeFromValue()),再走上表对应的写入命令;删除行对应DEL,新增行则先创建空字符串键(SET key "")。
在查询编辑器中执行 Redis 命令
Beekeeper Studio 为 Redis 提供了命令编辑器(编辑器模式text/x-redis),你可以在查询标签页中直接输入并执行原生 Redis 命令。底层executeCommand()(redis.ts)的实现要点:
- 支持一次输入多行命令,按行拆分、逐条执行,
#开头的行为注释被跳过; - 使用
redis-splitargs解析命令行,并从内置于 ui-kit 的redisCommands.json命令文档中识别命令名; - 执行走
sendCommand(),并利用 Redis 官方命令定义表(@redis/client的 COMMANDS)将原始回复按 RESP 版本转换(例如SET类命令、ZRANGE ... WITHSCORES会被转换成{value, score}对象数组); - 结果渲染做了友好化处理:
INFO解析为键值对、SCAN/HSCAN/SSCAN/ZSCAN解析为游标结果集、普通对象/数组/标量分别以合适的表格形式呈现; - 只读模式下(连接配置了 Read-Only),非只读命令会被拦截并返回错误提示;
- Redis 命令无法取消,
cancel()为空实现。
例如输入:
SET user:1 "{\"name\":\"Alice\"}" GET user:1 INFO server会依次返回各命令的结果:SET返回OK,GET返回 JSON 字符串,INFO server则以键值对表格展示服务器信息(包含redis_version等字段,集成测试 redis.spec.ts 中有对应断言)。
集成测试验证
仓库为 Redis 客户端提供了完整的集成测试(apps/studio/tests/integration/lib/db/clients/redis.spec.ts),测试通过 Testcontainers 启动真实的 Redis 容器(初始化脚本位于 dev/docker_redis/),覆盖了键的增删改查、各数据类型读写、EVAL/SCRIPT LOAD脚本命令、INFO解析以及ZRANGE WITHSCORES的转换等场景。这意味着本指南描述的行为均经过真实 Redis 实例的验证,可放心作为使用参考。
常见问题排查建议
- 认证失败:确认 Redis 版本;Redis 6+ 启用 ACL 时需同时填写用户名与密码,旧版只填密码并保持用户名为空;
- 连接超时:检查 Host/Port 是否与
redis.conf中的bind和port一致,并确认服务器防火墙放行了6379端口; - 远程连接:建议优先使用 SSH 隧道,或在服务器启用 TLS 后勾选 SSL 并配置相应证书(客户端支持从
sslCaFile、sslCertFile、sslKeyFile读取 PEM 证书内容,参见 connect()); - 看不到键:确认选择了正确的 Database 编号(Redis 默认 16 个逻辑库,客户端通过
CONFIG GET databases探测数量,失败时回退为 16); - 只读模式下命令被拒:连接若启用了 Read-Only 模式,
SET、DEL等写命令会被拦截,仅可执行只读命令。
小结
连接 Redis 只需在连接类型中选择Redis并填写主机、端口,必要时补充用户名与密码。在此基础上,Beekeeper Studio 通过"keys 逻辑表 + SCAN 游标 + 按类型映射读写命令"的抽象,提供了键浏览、值编辑、TTL 修改、命令编辑器以及 ReJSON JSON 文档查看等一整套可视化操作能力,并通过 TLS/SSH 保障远程连接安全。如需更多连接与配置细节,可继续阅读 连接指南 与 支持的数据库总览。
【免费下载链接】beekeeper-studioModern and easy to use SQL client for MySQL, Postgres, SQLite, SQL Server, and more. Linux, MacOS, and Windows.项目地址: https://gitcode.com/GitHub_Trending/be/beekeeper-studio
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考