feat: 重构项目心跳为Redis LIST并更新相关文档

重构项目心跳数据结构为Redis LIST,更新相关文档和OpenSpec规范。主要变更包括:
- 将项目心跳从STRING改为LIST类型
- 更新后端服务以支持LIST操作
- 同步更新文档和OpenSpec规范
- 统一后端端口为3001
- 添加部署指南和Windows部署文档

修复前端API请求路径,移除硬编码的localhost地址。添加PM2和Nginx配置文件模板,完善部署流程文档。更新Redis集成协议文档,明确LIST数据结构和外部项目对接规范。
This commit is contained in:
2026-01-17 18:36:52 +08:00
parent a8faa7dcaa
commit 7ac3949dfa
40 changed files with 4179 additions and 323 deletions

View File

@@ -10,19 +10,18 @@
**键名**: `项目心跳`
**类型**: String (JSON数组)
**类型**: List
**描述**: 统一存储所有项目的心跳信息,替代原有的分散键结构。
**数据格式**:
**数据格式**: 每个列表元素是一个 JSON 字符串,表示一条心跳记录:
```json
[
{
"projectName": "string",
"apiBaseUrl": "string",
"lastActiveAt": "number"
}
]
{
"projectName": "string",
"apiBaseUrl": "string",
"lastActiveAt": "number"
}
```
**字段说明**:
@@ -32,20 +31,15 @@
**示例**:
```json
[
{
"projectName": "用户管理系统",
"apiBaseUrl": "http://localhost:8080",
"lastActiveAt": 1704067200000
},
{
"projectName": "数据可视化平台",
"apiBaseUrl": "http://localhost:8081",
"lastActiveAt": 1704067260000
}
]
{
"projectName": "用户管理系统",
"apiBaseUrl": "http://localhost:8080",
"lastActiveAt": 1704067200000
}
```
说明:外部项目会周期性向 LIST 写入多条心跳记录;控制台后端按 `projectName` 去重,保留 `lastActiveAt` 最新的一条用于在线判定与项目列表展示。
### 2. 项目控制台日志
**键名**: `{projectName}_项目控制台`
@@ -94,7 +88,7 @@
**类型**: List
**描述**: 存储发送给项目的控制指令。
**描述**: 历史结构(已废弃)。当前命令下发通过 HTTP 调用目标项目 API不再通过 Redis 存储控制指令。
**指令对象格式**:
```json
@@ -206,9 +200,8 @@
为确保平滑过渡,系统在读取项目心跳时采用以下策略:
1. **优先读取新结构**: 首先尝试从`项目心跳`列表中查找项目
2. **回退到旧结构**: 如果新结构中未找到,则尝试从`{projectName}_项目心跳`键中读取
3. **自动迁移**: 当检测到旧结构数据时,可以自动迁移到新结构
1. **读取新结构**: 项目列表与在线判定只读取 `项目心跳`LIST
2. **旧结构仅用于迁移**: `{projectName}_项目心跳` 仅作为历史数据来源,通过 `POST /api/projects/migrate` 导入一次
## 性能优化
@@ -224,8 +217,8 @@
### 3. 心跳更新
- 直接更新项目列表中的对应项目
- 避免频繁的键操作
- 外部项目持续向 `项目心跳`LIST追加心跳记录
- 建议外部项目结合 `LTRIM` 控制列表长度
## 监控和维护
@@ -276,4 +269,4 @@
- [Redis数据类型](https://redis.io/docs/data-types/)
- [项目OpenSpec规范](../openspec/specs/)
- [API文档](../docs/api-documentation.md)
- [API文档](../docs/api-documentation.md)