基于 SpringBoot3 + MyBatis + MySQL + Redis + Vue3 的前后端分离博客系统,支持 Docker Compose 一键部署。
在线演示:http://8.156.66.224
| 层 | 技术 |
|---|---|
| 后端 | Spring Boot 3、MyBatis、MySQL 8.0、Redis 7、JWT、拦截器 |
| 前端 | Vue 3(Composition API)、Vite、Element Plus、Pinia、Vue Router、Axios |
| 部署 | Docker Compose 四容器编排(MySQL / Redis / 后端 / 前端 Nginx) |
- 用户:注册 / 登录(JWT + 登录拦截器),游客可读、登录后可评论
- 文章:文章列表、详情、分类,浏览量统计
- 分类 / 评论:文章分类管理,文章评论
- 读文章详情:先查 Redis(key
article:{id})→ 未命中查库并回写缓存(TTL 1h) - 防缓存穿透:不存在的文章缓存空值占位符
- 文章更新 / 删除时删除缓存而非更新,规避并发写脏数据
- 解决 Redis 反序列化
ClassCastException(保留 JSON 类型信息)
- Redis 记录「用户-文章」访问标记(TTL 1h),同一用户 1 小时内重复访问不计数
- 浏览量自增用
UPDATE article SET view_count = view_count + 1数据库原子操作,避免并发丢失更新
- 登录签发 JWT,
LoginInterceptor统一校验并注入 userId - 读文章接口允许游客访问(userId 为 null 时跳过防刷逻辑,try-catch 兜底)
- 前后端分离通过后端 CORS 配置解决跨域
user、category、article、comment 四张表,建表脚本见 sql 目录。
docker-compose up -d --build
# 前端 http://localhost 后端API http://localhost:8080本地开发:
cd blog-backend && mvn spring-boot:run
cd blog-frontend && npm install && npm run devblog-system/
├── docker-compose.yml
├── sql/ # 建表 + 种子数据
├── blog-backend/ # SpringBoot3 后端
│ └── src/main/java/.../
│ ├── controller/ # REST 接口
│ ├── service/ # 业务逻辑(缓存、浏览量防刷)
│ ├── mapper/ # MyBatis 接口 + XML
│ ├── config/ # Redis/CORS/拦截器配置
│ └── common/ # 统一响应、JWT 工具
└── blog-frontend/ # Vue3 前端
└── src/
├── views/ components/ api/ stores/
└── utils/request.js # Axios 拦截器