投稿作者:C2Z666
AtomGit 平台 CCBlog 项目作者
写在前面
一直以来我都是一个很喜欢开发各种功能的人,喜欢编写代码完成一个又一个任务。恰好学习 Java 有一段时间了,总感觉看着视频写代码少了点意思,更喜欢自己创作的感觉,仔细阅读了一些开源项目,萌生出自己写一个属于自己的博客社区的想法,项目的灵感来自于开源项目,我想也把这份开源的精神传递下去。
01|项目起点
Java 的开源项目非常多,但是精品却少之又少,这些精品大多分布于付费的各个星球,这是合理且可理解的,因为毕竟别人在项目上花了大量心血,而开源的精品早已成为烂大街的项目。
我在阅读了一些免费的开源项目之后,发现很多项目并不是我想看到的完美的样子:大量的 N+1 充斥代码的角角落落,注释零零散散,各种文档残缺……我想能不能做一个项目尽量规避掉这些问题,让学习者能用更低的成本获得知识,提高技术?
耗时 600h,在边学边写的过程中,我终于成功提交了我的第一个正式开源的项目:CCBlog。
02|项目经历
写一个项目并不容易,尤其是对于一个初学者来说。
刚开始我想要移植一个别人代码中的功能到代码中,但是代码都过来了,依赖却迷了路,看着满屏的找不到依赖,我陷入了沉思,我明明都可以点进文件了为什么还是缺少依赖?那时对依赖没有任何概念,甚至连为什么项目要分好几层 pom 文件都不清楚,就这样在黑暗中不断摸索,渐渐地我慢慢理解了不同层级的 pom 文件的作用,如何精准导入别人项目用到的依赖。
缓存的设计、消除 N+1 操作这些优化消耗了开发的大部分时间,每次开发出一个接口之后我就在问自己:能不能合并为一次查询?能不能批量操作?能不能加缓存?能不能更快?
对于文章查询接口的优化,我一开始采用分批次查询,先查询文章,然后分别查标签等信息,但是后来我发现分开查实际上是没意义的,一次使用连接查询五六张表来拿到数据,这样可以直接避免多次访问数据库。但是随着开发的演进,我发现这样还是不够好,连接是一个非常耗时的工作!
遗弃的多表查询
于是我立马开始思考优化的思路,一种思路是用子查询来优化,但是我想更好的方式还是用缓存,每次查询只查询文章的基本数据,标签、作者信息全部通过查询缓存拿到,这样就直接避免了多表连接的问题,还能提高查询的效率。当然优化是没有止境的,我只是尽力做到我能做到的最好。
缓存的架构是最棘手的难题,这花费了写项目的绝大部分时间,每一次的改动都会涉及多个文件改动,并且 Redis 和 RabbitMQ 的调试同样困难。
在落库功能实现上, Redis 相关的类各自以类似的形式呈现,我不断思考如何抽象出每个功能的抽象类,从而实现一次继承,简单编写,然而受制于个人技术和精力因素,直到最后我也没能完成顶层 Redis 类读写和落库任务的统一,这也是我目前最想完善的地方。
一次次的提交,或许是这段经历最好的见证:

03|项目介绍
本项目是一个博客社区项目,采用前后端分离架构开发,基本实现博客所有相关的功能,该项目也可作为内容社区的模板。项目包括五大模块分别是用户、文章、评论、通知、聊天模块。 后端所有核心模块均为独立自主开发 ,项目注释文档完整,非常适合学习交流和二次开发。
1.功能实现
- 无限层级评论树,无限叠楼
- 通知点击跳转评论,自动置顶评论并展开到目标
- 用户聊天 WebSocket 实时聊天,支持聊天框预览,支持删除撤回
- AI 大模型接口接入,目前支持 Qwen3,AI 回答 SSE 流式渲染
- Docker 一键部署,三行代码运行
2.项目亮点
- 双层缓存架构: Redis + Caffeine
- 批量聚合: Disruptor + Redis
- 异步批量落库: Redis + RabbitMQ + Mysql
- 批操作优化: Lua + Pipeline 批量操作 Redis、Mysql 批量读写
项目已在 10000 篇文章,1000 用户,每篇文章 Payload 约为 1.5KB 的环境下使用 Jmeter 对文章详情接口实测, 在 500 并发的测试环境下取得了 4000QPS,0 错误的成绩。

项目整体结构
3.技术栈
核心技术栈:
- 前端: Vue3 + Vite + TypeScript
- 后端: Spring Boot 3.x + MyBatis
- 缓存: 整体 Redis 7 + Caffeine 双层缓存,ConcurrentMap 辅助
- 性能优化: Disruptor + Lua
- 消息队列: RabbitMQ 3.12
- 数据库: MySQL 8.0
- 测试: Jmeter
- 部署: Docker + Nginx
这些技术都是在遇到问题后查阅资料并深思熟虑后引入的技术,经过了类似技术的横向对比,而非技术栈的简单堆砌。
04|项目地址
项目目前已经全部开源,包括前端代码、后端代码和 Docker 运行代码,下面是仓库地址:
🔗 项目地址: https://atomgit.com/C2Z666/ccblog
1.一键部署
注意:运行前请先确保 Docker 功能正常,Win 下安装和打开 Docker Desktop,Linux 下配置好 Docker 就可以,可使用 docker version 确认。
git clone https://atomgit.com/C2Z666/ccblog
cd ccblog/ccblog-docker
docker compose up
看到 server started 后到浏览器输入 localhost:8080 即可访问,默认用户包括 czc、lcx、rk、ywl、ccblog,密码都是 123,可以登录测试哦。图片上传和大模型聊天需要额外配置才可用。
05|项目展示
项目整体采用活泼可爱的界面和交互,操作体验好。
1.搜索简易实现

2.用户主页

3.通知跳转评论置顶渲染

4.实时聊天实时预览渲染,支持删除撤回
使用两个浏览器同时发送得到

5.大模型对话
后续会更新加入更多模型。

📫 项目地址: https://atomgit.com/C2Z666/ccblog
