云知问答
是一个类似于知乎、百度知道之类的在线问答网站。系统实现人员注册、登录、权限管理、问题提问、回答、点赞、合法校验、不同场景下的排序处理、统计分析、详情展示、内容搜索等功能模块;为实现核心业务系统的高可用与异步解耦,剥离出短信验证、日志处理、索引处理子系统;管理员角色可通过后台管理模块进行系统管理。
当然啦,我们并不是想去做一个颠覆它们的网站,我们只是借鉴一下他们简洁优雅的界面以及问答风格,本质上还是学习实践成果。当然要做到优雅,并不仅仅是页面的优美,还要有着强大的性能,能承受高并发场景,能快速响应,容错性强,在这里,我们将不懈地追求系统质量的完美。
我们将通过这个项目来检验所学的JavaWeb开发相关的知识,也是一个总结提高的过程,避免眼高手低。其实在实际的开发过程中, 会发现很多光学习发现不到的问题。废话说多了,还是开始正文内容吧~~~
不如先放个系统实际截图压压惊(系统只是个雏形版本,时间关系不继续做,有兴趣的小伙伴可以继续做完整版本,需要做的模块、优化完善的地方还是挺多的)~~~
- JDK : 8.0
- Server : Tomcat8.0
- IDE : IntelliJ IDEA
- 构建 : Maven
- 版本协作 :Git
- 前端UI :Layui
- 前端框架 :SpringMVC
- 逻辑框架 :Spring
- ORM : MyBatis
- 数据库 :MySQL
- 缓存 :Ehcache
- NoSql:Redis
- 搜索引擎 :Lucene
- 权限 : Shiro
- 队列 :RabbitMQ
工欲善其事必先利其器,在正式开发之前,我们先对项目做个简单的设计,把我们对于网站的界面的想法用原型设计出来,方便我们后期开发 有一定的参考,不然写一下,就要想想要做个啥东西,肯定心累~~~~
我们使用Mockplus设计一下我们的网站界面,来,走起!
- MySQL数据库表设计:这里我们先设计出系统需要的核心的表
- Redis表设计:
表名 | 类型 | 作用 | 键/值/权重 |
---|---|---|---|
REDIS_HASH_PHONEVERCODE_TIME | Hash | 已申请验证码手机号 | 手机号 | 时间戳 |
REDIS_HASH_PHONEVERCODES | Hash | 手机号以及发送的验证码 | 手机号 | 验证码 |
REDIS_HASH_USER_HEAD_IMGS | Hash | 用户头像路径信息 | 用户ID | 头像相对路径 |
REDIS_SET_HASREGISTERPHONE | Set | 已注册用户手机号 | 用户手机号 |
REDIS_SET_USER_QUESTIONS_人员ID | Set | 用户已提问问题 | 问题ID |
REDIS_SET_STAR_ANSWERS_人员ID | Set | 用户已点赞回答 | 回答ID |
REDIS_ZSET_QUESTIONS_TIME | Sorted Set | 新增问题信息 | 问题ID | 时间戳 |
REDIS_ZSET_QUESTIONS_HOT | Sorted Set | 热门问题 | 问题ID | 热门指数 |
REDIS_ZSET_QUESTIONS_HOT_用户ID | Sorted Set | 热门问题临时查询缓存 | 问题ID | 热门指数 |
REDIS_ZSET_QUESTION_ANSWERS_问题ID | Sorted Set | 问题回答信息 | 问题ID | 点赞数 |
Tomcat版本8.0以上即可
创建好数据库,执行SQL(目录:/doc/sql/云知SQL.sql)创建所需表,数据库连接配置文件 database.properties 对应修改即可
安装好Redis,建议设置密码,否则Redis连接会有权限等问题,默认连接密码123456,windows中redis可修改redis.windows.conf文件,具体可搜索设置方法。Redis连接配置:springredis.xml。
这里推荐开发中使用可视化工具,方便我们追踪redis缓存情况:https://redisdesktop.com/download
安装好RabbitMQ,新建用户,授予权限,修改对应连接配置:springrabbit.xml
系统没有采用分布式文件系统,只是简单的集成文件模块,用户头像预览等需要配置Tomcat磁盘访问权限,例如用户头像文件默认放在D:\YunZhi目录,那么需要配置Tomcat的server.xml文件如下内容:
- 代码部署: 下载代码 ;编译输出 ;配置Tomcat;