# redis **Repository Path**: middleware-lab/redis ## Basic Information - **Project Name**: redis - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-15 - **Last Updated**: 2026-09-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Redis 实验平台(Redis Lab) 用 **Go + React** 搭建的交互式实验项目,把 Redis 的**数据类型、常见使用场景、以及缓存相关的经典问题**以「命令 → 结果 → 讲解」的方式逐个演示出来。每个场景都连到真实的 Redis 执行,前端实时展示执行过程和可视化结果。 ## 技术栈 - **后端**:Go 1.22+(标准库 `net/http` + `github.com/redis/go-redis/v9`) - **前端**:React 18 + TypeScript + Vite(纯 CSS,无 UI 框架依赖) - **存储**:Redis 7(Docker 部署) - **实时**:Pub/Sub 场景通过 SSE 把 Redis 的消息实时推送到浏览器 ## 场景清单(共 25 个) | 分类 | 场景 | | --- | --- | | **数据类型** | String、Hash、List、Set、ZSet、Geo、Bitmap、HyperLogLog | | **常见场景** | 缓存 Cache-Aside、分布式锁、计数器、限流、秒杀扣库存、排行榜、会话 Session、发布订阅 Pub/Sub、消息队列 Stream | | **问题模拟** | 缓存穿透、缓存击穿、缓存雪崩、热点 Key、大 Key 危害、分布式锁误删、内存淘汰策略、过期删除策略 | 每个场景都包含:背景说明、涉及知识点、逐步执行的 Redis 命令与结果、以及一段「小结」。 ## 目录结构 ``` . ├── backend/ # Go 后端 │ ├── main.go # 入口 + CORS + 日志 │ ├── registry.go # 场景注册表(标题/描述/知识点) │ ├── redis.go # Redis 客户端 + 演示工具 │ ├── pubsub.go # SSE Hub + Pub/Sub 转发 + Lua 脚本 │ ├── router.go # 路由 + health/overview │ ├── handlers_datatypes.go # 数据类型演示 │ ├── handlers_scenarios.go # 常见场景演示 │ └── handlers_problems.go # 问题模拟演示 ├── frontend/ # React 前端 │ └── src/ │ ├── components/ # Sidebar / ScenarioPanel / StepsList / viz / PubSubPanel │ ├── api.ts / types.ts │ └── styles.css ├── docker-compose.yml # Redis └── Makefile ``` ## 快速开始 ### 0. 前置要求 - Go 1.22+ - Node.js 18+ - Docker(跑 Redis) ### 一键启动(推荐) ```bash ./start.sh # 或 make dev ``` 一条命令依次完成:启动 Redis(Docker)→ 编译并启动后端 → 启动前端。前台运行,按 `Ctrl+C` 停止后端与前端;`./stop.sh --all` 可连 Redis 一起停。 ```bash ./stop.sh # 只停后端 + 前端 ./stop.sh --all # 同时停 Redis 容器 ``` 启动后访问 `http://localhost:5173`(前端端口被占用时会自动 +1,以终端输出的 vite 地址为准)。 ### 手动分步启动 ```bash # 1. Redis docker compose up -d # 2. 后端(端口 8080) cd backend && go run . # 3. 前端(端口 5173) cd frontend && npm install && npm run dev ``` > 前端开发服务器已配置代理,把 `/api` 转发到 `http://localhost:8080`,无跨域问题。`start.sh` 支持 `PORT`、`FRONTEND_PORT`、`REDIS_ADDR` 环境变量覆盖默认值。 ## API 说明 - `GET /api/health` — 健康检查(含 Redis 连通性) - `GET /api/overview` — 场景分类列表 - `GET /api/demo/{id}` — 运行某个演示(`id` 见注册表,如 `string`、`seckill`、`penetration`) - 部分场景支持参数:`cache?id=1`、`ratelimit?n=30`、`breakdown?n=30` - `GET /api/pubsub/events` — SSE 实时订阅端点 - `GET /api/pubsub/publish?msg=...` — 发布一条消息 演示返回结构: ```json { "id": "seckill", "title": "秒杀扣库存", "steps": [{ "command": "SET ... 10", "result": "OK", "note": "初始化库存" }], "summary": "……", "data": { "stock": 10, "requests": 50, "success": 10 } } ``` ## 环境变量 | 变量 | 默认值 | 说明 | | --- | --- | --- | | `REDIS_ADDR` | `127.0.0.1:6379` | Redis 地址 | | `REDIS_PASSWORD` | 空 | Redis 密码 | | `PORT` | `8080` | 后端监听端口 |