生成的系统界面如下:
让TRAE SOLO自己生成一个设计文档吧!
Redis Manager 设计文档
1. 项目概述
1.1 项目简介
Redis Manager 是一个基于 PyQt6 开发的图形化 Redis 管理工具,采用 Apple 官网风格的现代化 UI 设计,提供直观的键值管理、数据查看和编辑功能。
1.2 技术栈
| 组件 |
技术 |
版本 |
| 编程语言 |
Python |
3.13+ |
| GUI 框架 |
PyQt6 |
6.5+ |
| Redis 客户端 |
redis-py |
5.0+ |
| 配置文件 |
JSON |
- |
1.3 设计目标
- 现代化界面:采用 Apple 风格设计语言,简洁优雅
- 高性能:使用多线程处理 Redis 操作,避免 UI 卡顿
- 全功能:支持所有 Redis 数据类型的查看和编辑
- 易用性:直观的操作流程,无需记忆命令
2. 系统架构
2.1 架构图
┌─────────────────────────────────────────────────────────────┐
│ Redis Manager (PyQt6) │
├─────────────────────────────────────────────────────────────┤
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────┐ │
│ │ UI Layer │ │ Business Layer │ │ Data Layer │ │
│ │ (QtWidgets) │ │ (RedisClient) │ │ (redis-py) │ │
│ │ │ │ │ │ │ │
│ │ • MainWindow │ │ • Connection │ │ • Redis │ │
│ │ • Dialogs │ │ • CRUD Ops │ │ Server │ │
│ │ • Styles │ │ • Config Mgmt │ │ │ │
│ └────────┬────────┘ └────────┬────────┘ └──────┬──────┘ │
│ │ │ │ │
│ └────────────────────┴───────────────────┘ │
│ │ │
│ ┌─────────┴─────────┐ │
│ │ Thread Pool │ │
│ │ (QThreadPool) │ │
│ └───────────────────┘ │
└─────────────────────────────────────────────────────────────┘
2.2 模块划分
| 模块 |
职责 |
对应类/函数 |
| UI 模块 |
界面渲染、事件处理 |
RedisManagerWindow, NewKeyDialog |
| 业务逻辑 |
Redis 操作封装 |
RedisClient |
| 异步处理 |
后台任务执行 |
_Worker, _WorkerSignals |
| 样式配置 |
界面主题、颜色 |
app_stylesheet(), COLORS |
3. 核心组件设计
3.1 RedisClient 类
3.1.1 职责
封装所有 Redis 操作,提供统一的错误处理和连接管理。
3.1.2 核心方法
| 方法 |
功能 |
返回值 |
connect() |
建立 Redis 连接 |
bool |
disconnect() |
断开连接 |
None |
is_connected() |
检查连接状态 |
bool |
get_keys() |
获取键列表(使用 SCAN) |
list |
get_type() |
获取键类型 |
str |
get_value() |
获取键值 |
Any |
set_value() |
设置键值 |
bool |
delete_key() |
删除键 |
int |
set_ttl() |
设置过期时间 |
None |
get_ttl() |
获取过期时间 |
int |
3.1.3 设计特点
- 连接池管理:使用
redis-py 内部连接池
- 超时设置:连接超时 5 秒,操作超时 5 秒
- 错误处理:所有方法包裹 try-except,避免崩溃
- 配置持久化:自动保存/加载连接配置到 JSON 文件
3.2 RedisManagerWindow 类
3.2.1 职责
主窗口类,负责界面布局、事件绑定和业务协调。
3.2.2 界面布局
┌─────────────────────────────────────────────────────────────┐
│ [Safari Toolbar] Redis Manager | Host:Port | Connect Btn │
├──────────────────────────┬──────────────────────────────────┤
│ │ │
│ [Left Panel] │ [Right Panel] │
│ ┌────────────────────┐ │ ┌────────────────────────────┐ │
│ │ Keys │ │ │ Key: xxx Type: string │ │
│ │ [Search... ] │ │ │ TTL: 3600 [Set TTL] │ │
│ │ │ │ ├────────────────────────────┤ │
│ │ • key1 │ │ │ Value: │ │
│ │ • key2 │ │ │ ┌────────────────────────┐ │ │
│ │ • key3 │ │ │ │ value content here │ │ │
│ │ │ │ │ │ ... │ │ │
│ │ [Refresh][New][Del]│ │ │ └────────────────────────┘ │ │
│ └────────────────────┘ │ │ [Save][Add][Delete] │ │
│ │ └────────────────────────────┘ │
├──────────────────────────┴──────────────────────────────────┤
│ [Status Bar] ● Connected | Redis Manager v1.0 │
└─────────────────────────────────────────────────────────────┘
3.2.3 关键属性
| 属性 |
类型 |
说明 |
redis_client |
RedisClient |
Redis 客户端实例 |
current_keys |
list |
当前键列表缓存 |
thread_pool |
QThreadPool |
线程池用于异步操作 |
3.3 异步处理机制
3.3.1 设计动机
Redis 操作可能因网络延迟导致 UI 卡顿,因此采用多线程处理。
3.3.2 实现方式
class _Worker(QRunnable):
"""工作线程,用于在后台执行 Redis 操作"""
def __init__(self, fn, *args, **kwargs):
self.fn = fn
self.signals = _WorkerSignals()
def run(self):
try:
result = self.fn(*args, **kwargs)
self.signals.result.emit(result)
except Exception as e:
self.signals.error.emit(str(e))
finally:
self.signals.finished.emit()
class _WorkerSignals(QObject):
"""信号定义,用于线程间通信"""
result = pyqtSignal(object) # 操作成功,返回结果
error = pyqtSignal(str) # 操作失败,返回错误信息
finished = pyqtSignal() # 操作完成(无论成败)
3.3.3 使用场景
4. UI 设计规范
4.1 设计原则
4.1.1 Apple 风格参考
- 色彩:浅灰背景 + 白色卡片 + 蓝色强调色
- 圆角:按钮 980px(全圆角),输入框 10px
- 字体:Segoe UI / SF Pro Display,等宽字体用于代码
- 阴影:微妙的边框分隔,避免厚重阴影
4.2 颜色系统
COLORS = {
"bg_dark": "#f5f5f7", # 页面背景(浅灰)
"bg_medium": "#ffffff", # 卡片背景(白色)
"accent": "#0071e3", # 强调色(系统蓝)
"accent_hover": "#0077ed", # 悬停色
"text_primary": "#1d1d1f", # 主文本(深黑)
"text_secondary": "#6e6e73", # 次要文本(灰色)
"success": "#34c759", # 成功(绿色)
"danger": "#ff3b30", # 危险(红色)
"warning": "#ff9500", # 警告(橙色)
"border": "#d2d2d7", # 边框色
}
4.3 组件样式
4.3.1 按钮样式
| 类型 |
ID |
背景色 |
用途 |
| 默认 |
- |
#e8e8ed |
普通操作 |
| 主要 |
accent |
#0071e3 |
新建、保存 |
| 成功 |
success |
#34c759 |
连接 |
| 危险 |
danger |
#ff3b30 |
删除 |
| 警告 |
warning |
#ff9500 |
设置 TTL |
4.3.2 Safari 工具栏
- 高度:52px
- 背景:线性渐变(
#f7f7f7 → #ececec → #e2e2e4)
- 边框:底部 1px
#c6c6c8
- 地址栏:白色圆角卡片,类似 Safari URL 栏
5. 功能模块设计
5.1 连接管理
5.1.1 连接参数
| 参数 |
默认值 |
说明 |
| Host |
localhost |
Redis 服务器地址 |
| Port |
6379 |
服务端口 |
| Password |
- |
访问密码(可选) |
| DB |
0 |
数据库索引 |
| SSL |
false |
是否启用 SSL |
5.1.2 配置持久化
- 文件:
redis_config.json
- 格式:JSON
- 自动保存:连接成功后自动保存
- 自动加载:启动时自动加载上次配置
5.2 键值管理
5.2.1 支持的数据类型
| 类型 |
读取 |
写入 |
添加元素 |
删除元素 |
| String |
 |
 |
- |
- |
| List |
 |
 |
(rpush) |
(lrem) |
| Set |
 |
 |
(sadd) |
(srem) |
| ZSet |
 |
 |
(zadd) |
(zrem) |
| Hash |
 |
 |
(hset) |
(hdel) |
5.2.2 键列表优化
- 使用 SCAN:避免
KEYS 命令在大数据量下阻塞 Redis
- 分页加载:默认最多加载 500 个键
- 通配符搜索:支持
* 通配符模式匹配
5.3 TTL 管理
5.3.1 功能说明
- 设置 TTL:输入秒数,-1 表示永不过期,0 表示立即过期
- 显示 TTL:实时显示剩余秒数或"永不过期"
- 异步处理:避免网络延迟导致 UI 卡顿
5.3.2 交互流程
1. 用户点击"设置 TTL"按钮
2. 弹出输入对话框,显示当前 TTL 作为默认值
3. 用户输入新值,点击确认
4. 禁用按钮,启动工作线程
5. 后台执行 Redis EXPIRE/PERSIST 命令
6. 更新界面显示,恢复按钮状态
7. 显示成功/失败提示
6. 数据流设计
6.1 键值查看流程
┌─────────┐ ┌─────────────┐ ┌─────────────┐ ┌──────────┐
│ 用户点击 │ --> │ 获取键类型 │ --> │ 获取键值 │ --> │ 格式化显示│
│ 键列表项 │ │ (TYPE cmd) │ │ (GET/LRANGE │ │ 在文本框 │
└─────────┘ └─────────────┘ │ /HGETALL等) │ └──────────┘
└─────────────┘
6.2 键值编辑流程
┌─────────┐ ┌─────────────┐ ┌─────────────┐ ┌──────────┐
│ 用户编辑 │ --> │ 解析文本内容 │ --> │ 构建数据 │ --> │ 执行写入 │
│ 值文本框 │ │ (按类型格式) │ │ (str/list/ │ │ (SET/RPUSH│
└─────────┘ └─────────────┘ │ dict等) │ │ /HSET等) │
└─────────────┘ └──────────┘
7. 错误处理策略
7.1 错误分类
| 类型 |
示例 |
处理方式 |
| 连接错误 |
网络超时、认证失败 |
弹窗提示,保留配置 |
| 操作错误 |
键不存在、类型不匹配 |
弹窗提示,回滚界面 |
| 输入错误 |
格式错误、空值 |
前端校验,即时反馈 |
| 系统错误 |
内存不足、文件权限 |
日志记录,优雅退出 |
7.2 错误处理模式
try:
result = redis_operation()
update_ui(result)
show_success_message()
except Exception as e:
show_error_message(str(e))
# 可选:回滚 UI 状态
finally:
restore_ui_state()
8. 扩展性设计
8.1 可扩展点
| 扩展点 |
实现方式 |
示例 |
| 新数据类型 |
添加 get_value() 分支 |
Bitmap、HyperLogLog |
| 新操作 |
添加工具栏按钮 + 处理方法 |
批量删除、导入导出 |
| 新主题 |
修改 COLORS 和 app_stylesheet() |
深色模式 |
| 新存储后端 |
实现 RedisClient 接口 |
支持 Redis Cluster |
8.2 代码组织建议
redis_manager/
├── __init__.py
├── main.py # 入口文件
├── ui/
│ ├── __init__.py
│ ├── main_window.py # 主窗口
│ ├── dialogs.py # 对话框
│ └── styles.py # 样式配置
├── core/
│ ├── __init__.py
│ ├── redis_client.py # Redis 客户端
│ └── config.py # 配置管理
└── utils/
├── __init__.py
└── workers.py # 异步工作线程
9. 性能优化
9.1 已实施的优化
| 优化点 |
实现方式 |
效果 |
| 异步操作 |
QThreadPool + _Worker |
UI 不卡顿 |
| 键列表加载 |
SCAN 替代 KEYS |
避免阻塞 Redis |
| 连接池 |
redis-py 内置池 |
复用连接 |
| 配置缓存 |
内存 + JSON 文件 |
快速启动 |
9.2 潜在优化方向
- 虚拟列表:键列表使用
QAbstractListModel 实现虚拟滚动
- 增量加载:值内容分页显示,避免大值卡顿
- 连接池调优:根据并发量调整连接池大小
- 缓存策略:缓存常用键值,减少 Redis 查询
10. 安全考虑
10.1 安全措施
| 措施 |
说明 |
| 密码隐藏 |
密码输入框使用 EchoMode.Password |
| 配置加密 |
建议:敏感配置使用密钥加密存储 |
| 命令限制 |
仅执行安全的读/写操作,禁止危险命令 |
| 超时设置 |
连接和操作超时,防止无限等待 |
10.2 安全建议
- 生产环境使用 SSL 连接
- 定期更换 Redis 密码
- 限制 Redis 用户权限(使用 ACL)
- 不在公共网络暴露 Redis 端口
11. 版本历史
| 版本 |
日期 |
变更内容 |
| 1.0.0 |
2026-04 |
初始版本,基本功能实现 |
| 1.0.1 |
2026-04 |
修复 PyQt6 参数名兼容性 |
| 1.0.2 |
2026-04 |
优化 TTL 设置错误处理 |
12. 附录
12.1 依赖列表
PyQt6>=6.5.0
redis>=5.0.0
12.2 运行环境
- 操作系统:Windows 10/11, macOS, Linux
- Python:3.10+
- Redis:4.0+
12.3 参考资料
文档版本:1.0
最后更新:2026年6月