Skip to content

Repository files navigation

Redis 延迟队列管理系统

基于 Spring Boot + Redis + Vue 3 的企业级延迟队列管理系统,提供完整的任务调度、监控和管理功能。

系统截图

系统首页延迟队列管理系统监控用户管理数据统计

img_6.png

img_7.png

img_8.png

🚀 项目特性

核心功能

  • 延迟队列管理:基于 Redis Sorted Set 实现的高性能延迟队列
  • 任务调度:支持任务的添加、暂停、恢复、删除等操作
  • 实时监控:系统性能监控、队列状态监控、API 统计
  • 用户权限管理:基于 RBAC 的用户权限控制
  • 操作日志:完整的操作审计日志
  • 数据统计:丰富的数据统计和可视化图表

技术特性

  • 高性能:Redis 作为存储引擎,支持高并发场景
  • 高可用:支持集群部署,故障自动恢复
  • 易扩展:模块化设计,支持自定义任务处理器
  • 安全性:JWT 认证,接口权限控制
  • 监控完善:系统健康检查,性能指标监控

🏗️ 技术架构

后端技术栈

  • 框架:Spring Boot 2.7.0
  • 数据库:MySQL 8.0 + Redis 6.0+
  • 安全:Spring Security + JWT
  • ORM:Spring Data JPA + Hibernate
  • 连接池:HikariCP
  • 构建工具:Maven 3.6+
  • JDK版本:Java 11+

前端技术栈

  • 框架:Vue 3.3.4
  • UI组件:Element Plus 2.3.7
  • 路由:Vue Router 4.2.4
  • 图表:ECharts 5.4.3
  • HTTP客户端:Axios 1.4.0
  • 构建工具:Vite 4.4.0

系统架构

┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ 前端 (Vue3) │────│ 后端 (Spring) │────│ Redis 集群 │
│ - 管理界面 │ │ - REST API │ │ - 延迟队列 │
│ - 数据可视化 │ │ - 任务调度 │ │ - 缓存存储 │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│
┌─────────────────┐
│ MySQL 数据库 │
│ - 用户数据 │
│ - 系统配置 │
│ - 操作日志 │
└─────────────────┘

📁 项目结构

redis-delay-queue/
├── src/main/java/com/example/ # 后端源码
│ ├── config/ # 配置类
│ ├── controller/ # 控制器
│ ├── entity/ # 实体类
│ ├── service/ # 服务层
│ ├── repository/ # 数据访问层
│ ├── security/ # 安全配置
│ ├── queue/ # 延迟队列核心
│ └── util/ # 工具类
├── src/main/resources/ # 配置文件
│ ├── application.yml # 主配置文件
│ └── static/ # 静态资源
├── frontend/ # 前端项目
│ ├── src/
│ │ ├── views/ # 页面组件
│ │ │ ├── Home.vue # 系统首页
│ │ │ ├── DelayQueueManagement.vue # 延迟队列管理
│ │ │ ├── SystemMonitor.vue # 系统监控
│ │ │ ├── UserManagement.vue # 用户管理
│ │ │ └── ...
│ │ ├── router/ # 路由配置
│ │ └── utils/ # 工具函数
│ ├── package.json # 前端依赖
│ └── vite.config.js # 构建配置
└── pom.xml # Maven 配置

🛠️ 环境要求

开发环境

  • JDK: 11 或更高版本
  • Maven: 3.6 或更高版本
  • Node.js: 16 或更高版本
  • MySQL: 8.0 或更高版本
  • Redis: 6.0 或更高版本

生产环境

  • 服务器: Linux (推荐 CentOS 7+ / Ubuntu 18.04+)
  • 内存: 最低 4GB,推荐 8GB+
  • 存储: 最低 20GB 可用空间
  • 网络: 支持外网访问

🚀 快速开始

1. 环境准备

安装 MySQL

# CentOS/RHEL
sudo yum install mysql-server
sudo systemctl start mysqld
sudo systemctl enable mysqld
# Ubuntu/Debian
sudo apt update
sudo apt install mysql-server
sudo systemctl start mysql
sudo systemctl enable mysql

安装 Redis

# CentOS/RHEL
sudo yum install redis
sudo systemctl start redis
sudo systemctl enable redis
# Ubuntu/Debian
sudo apt update
sudo apt install redis-server
sudo systemctl start redis-server
sudo systemctl enable redis-server

2. 数据库初始化

-- 创建数据库CREATEDATABASEsys_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATEDATABASEsys_user_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 创建用户(可选)CREATEUSER 'delay_queue'@'%' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON sys_db.* TO 'delay_queue'@'%';
GRANT ALL PRIVILEGES ON sys_user_db.* TO 'delay_queue'@'%';
FLUSH PRIVILEGES;

3. 后端部署

开发环境

# 克隆项目
git clone <repository-url>cd redis-delay-queue
# 修改配置文件
cp src/main/resources/application.yml.example src/main/resources/application.yml
# 编辑 application.yml,配置数据库连接信息# 编译运行
mvn clean install
mvn spring-boot:run

生产环境

# 编译打包
mvn clean package -Dmaven.test.skip=true
# 运行应用
java -jar target/redis-delay-queue-1.0-SNAPSHOT.jar
# 或使用 systemd 服务
sudo cp scripts/redis-delay-queue.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl start redis-delay-queue
sudo systemctl enable redis-delay-queue

4. 前端部署

开发环境

cd frontend
npm install
npm run dev

生产环境

cd frontend
npm install
npm run build
# 部署到 Nginx
sudo cp -r dist/* /var/www/html/

5. Nginx 配置

server{listen80;server_name your-domain.com; # 前端静态文件location / {root /var/www/html;indexindex.html;try_files$uri$uri/ /index.html;} # 后端 API 代理location /api/ {proxy_passhttp://localhost:8090;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}}

📖 API 文档

延迟队列 API

添加延迟任务

POST /api/delay-queue/addContent-Type: application/json
{
"taskId": "task_001",
"taskData": {
"type": "email",
"recipient": "user@example.com",
"content": "Hello World"
},
"delaySeconds": 300,
"priority": 1
}

查询任务状态

GET /api/delay-queue/status/{taskId}

取消任务

DELETE /api/delay-queue/cancel/{taskId}

系统监控 API

获取系统状态

GET /api/monitor/system

获取队列统计

GET /api/monitor/queue-stats

🔧 配置说明

应用配置 (application.yml)

server:
port: 8090# 服务端口spring:
datasource:
primary:
url: jdbc:mysql://localhost:3306/xxusername: rootpassword: your_passworduser:
url: jdbc:mysql://localhost:3306/xxusername: rootpassword: your_passwordredis:
host: localhost # Redis 主机port: 6379# Redis 端口password: # Redis 密码database: 0# Redis 数据库# 延迟队列配置delay-queue:
scan-interval: 1000# 扫描间隔(毫秒)batch-size: 100# 批处理大小thread-pool-size: 10# 线程池大小

🔒 安全配置

JWT 配置

  • 密钥: 建议使用 256 位随机密钥
  • 过期时间: 默认 24 小时
  • 刷新机制: 支持 Token 刷新

权限控制

  • ADMIN: 系统管理员,拥有所有权限
  • USER: 普通用户,只能管理自己的任务
  • GUEST: 访客用户,只读权限

📊 监控指标

系统指标

  • CPU 使用率
  • 内存使用率
  • 磁盘使用率
  • 网络 I/O

业务指标

  • 任务总数
  • 待执行任务数
  • 已完成任务数
  • 失败任务数
  • 平均处理时间

Redis 指标

  • 连接数
  • 内存使用
  • 命令执行统计
  • 键空间统计

🚀 生产部署流程

1. 服务器准备

# 创建应用用户
sudo useradd -m -s /bin/bash delayqueue
# 创建应用目录
sudo mkdir -p /opt/redis-delay-queue
sudo chown delayqueue:delayqueue /opt/redis-delay-queue
# 创建日志目录
sudo mkdir -p /var/log/redis-delay-queue
sudo chown delayqueue:delayqueue /var/log/redis-delay-queue

2. 应用部署

# 上传应用包
scp target/redis-delay-queue-1.0-SNAPSHOT.jar delayqueue@server:/opt/redis-delay-queue/
# 上传配置文件
scp src/main/resources/application-prod.yml delayqueue@server:/opt/redis-delay-queue/application.yml
# 设置权限
chmod +x /opt/redis-delay-queue/redis-delay-queue-1.0-SNAPSHOT.jar

3. 系统服务配置

# 创建 systemd 服务文件
sudo tee /etc/systemd/system/redis-delay-queue.service > /dev/null <<EOF[Unit]Description=Redis Delay Queue ServiceAfter=network.target mysql.service redis.service[Service]Type=simpleUser=delayqueueGroup=delayqueueWorkingDirectory=/opt/redis-delay-queueExecStart=/usr/bin/java -jar -Dspring.profiles.active=prod redis-delay-queue-1.0-SNAPSHOT.jarRestart=alwaysRestartSec=10StandardOutput=journalStandardError=journal[Install]WantedBy=multi-user.targetEOF# 启动服务
sudo systemctl daemon-reload
sudo systemctl start redis-delay-queue
sudo systemctl enable redis-delay-queue

4. 前端部署

# 构建前端cd frontend
npm run build
# 部署到 Web 服务器
sudo cp -r dist/* /var/www/html/
sudo chown -R nginx:nginx /var/www/html/

5. 负载均衡配置

upstream delay_queue_backend {server127.0.0.1:8090 weight=1 max_fails=3 fail_timeout=30s; # server 127.0.0.1:8091 weight=1 max_fails=3 fail_timeout=30s;}server{listen80;server_name your-domain.com;location / {root /var/www/html;indexindex.html;try_files$uri$uri/ /index.html;}location /api/ {proxy_passhttp://delay_queue_backend;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme; # 健康检查proxy_connect_timeout5s;proxy_send_timeout10s;proxy_read_timeout10s;}}

🔍 故障排查

常见问题

  1. 应用启动失败

    # 查看日志
    sudo journalctl -u redis-delay-queue -f
    # 检查端口占用
    sudo netstat -tlnp | grep 8090
  2. 数据库连接失败

    # 测试数据库连接
    mysql -h localhost -u root -p sys_db
    # 检查防火墙
    sudo firewall-cmd --list-ports
  3. Redis 连接失败

    # 测试 Redis 连接
    redis-cli ping
    # 检查 Redis 状态
    sudo systemctl status redis

性能优化

  1. JVM 参数优化

    -Xms2g -Xmx4g -XX:+UseG1GC -XX:MaxGCPauseMillis=200
  2. 数据库优化

    -- 添加索引CREATEINDEXidx_task_execute_timeON delay_tasks(execute_time);
    CREATEINDEXidx_task_statusON delay_tasks(status);
  3. Redis 优化

    # redis.conf
    maxmemory 2gb
    maxmemory-policy allkeys-lru
    save 900 1
    save 300 10
    save 60 10000

📝 更新日志

v1.0.0 (2024-01-15)

  • ✨ 初始版本发布
  • 🚀 基础延迟队列功能
  • 👥 用户权限管理
  • 📊 系统监控面板
  • 📱 响应式前端界面

🤝 贡献指南

  1. Fork 本仓库
  2. 创建特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 打开 Pull Request

📄 许可证

本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。

📞 联系方式

  • 项目维护者:webVueBlog

🙏 致谢

感谢以下开源项目的支持:

About

redis-delay-queue,redis延迟队列;库的表名,存储引擎,物理文件大小,表空间,表空间占比,索引空间

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages