本文作者:程序员鱼皮
大家好,我是鱼皮。
之前已经给大家分享了三个全栈项目,比如瑞吉外卖什么的,这几个项目都是侧重于带大家学习框架的运用、以及一些简单的业务逻辑,但单独看代码就会发现没有太多的编程技巧可以学习。
这次给大家分享的项目则是一个专门用来学习 Redis 技术的 免费项目 —— 某马点评。事先说明,我可没有被绑架,而是前段时间我在复习 Redis 的时候把这个项目完整刷了一遍,觉得确实不错,才分享给大家。
这是我自己记录的笔记:
我当时学 Redis 的时候是先学会用法,再自己通过做项目来摸索其应用场景,根本没有这种系统的、项目实践式的教程。不得不感叹,现在学编程的资源真的是太丰富了、成本也越来越低了。
下面我带大家一起来学习下这个项目。
提示:本文超长,适合收藏
在线店铺点评 APP(H5 网页),有点类似美团点评。
特色:
- 项目整体比较精简,适合初学练手
- 项目中大量运用到了 Redis,极其适合学习 Redis 的同学来实战(事实上这个项目都是为了 Redis 课而生的)
- 项目的代码细节很多,能学到不少优化技巧
包括:查看点评(热评)、发布点评、点赞
关注、查询关注的人发的帖子、查看好友共同关注
分类浏览店铺、查看附近的店铺
个人信息查看和管理
话说项目太仿真了,在用户编辑资料页竟然还能开 VIP?!🐶
快速导学视频:https://www.bilibili.com/video/BV1PG4y1s7io
原课程视频地址:https://www.bilibili.com/video/BV1cr4y1671t
这个项目没有专门的课程,而是融合在了 Redis 的教程中,可以从 P24 开始看。
编程导航 的同学也可以直接获取我整理好的代码 + 学习资料 + 原创笔记 + 简历亮点:https://www.codefather.cn/post/1808580989170089985
Spring 相关:
- Spring Boot 2.x
- Spring MVC
数据存储层:
- MySQL:存储数据
- MyBatis Plus:数据访问框架
Redis 相关:
- spring-data-redis:操作 Redis
- Lettuce:操作 Redis 的高级客户端
- Apache Commons Pool:用于实现 Redis 连接池
- Redisson:基于 Redis 的分布式数据网格
工具库:
- HuTool:工具库合集
- Lombok:注解式代码生成工具
前端不是本项目的重点,了解即可:
- 原生 HTML、CSS、JS 三件套
- Vue 2(渐进式使用)
- Element UI 组件库
- axios 请求库
这个项目是单体项目,架构比较简单,下图依然是理想架构,实际上只用单台 Tomcat、MySQL、Redis 即可:
这个项目几乎用到了 Redis 的所有主流特性,都值得重点学习,如官方提供的项目介绍图:
请看这个视频:https://www.bilibili.com/video/BV1PG4y1s7io
这里给大家划分一下视频章节对应的知识点:
- p1 - p23 Redis 基础学习
- p24 - p25 本项目介绍
- p26 - p34 Redis 短信登录和 Session 共享
- p35 - p47 Redis 缓存应用
- p48 - p49 Redis 实现全局唯一 id 生成
- p50 - p55 传统秒杀实现方案
- p56 - p68 Redis 实现分布式锁
- p69 - p71 Redis 实现秒杀
- p72 - p77 Redis 实现消息队列
- p80 - p81 Redis 点赞及点赞排行榜
- p82 - p83 Redis 实现共同关注
- p84 - p87 Redis 实现 Feed 流
- p88 - p90 Redis 实现附近店铺功能(GEO)
- p91 - p93 Redis 实现签到
- p94 - p95 Redis 实现 UV 统计
单纯为了完成项目的话,直接看 p24 - p95 即可。
config 目录:存放项目依赖相关配置
- MvcConfig:配置了登录、自动刷新登录 Token 的拦截器
- MybatisConfig:配置 MyBatis Plus 分页插件
- RedissonConfig:创建单例 Redisson 客户端
- WebExceptionAdvice:全局响应拦截器
controller 目录:存放 Restful 风格的 API 接口
dto 目录:存放业务封装类,如 Result 通用响应封装(不推荐学习它的写法)
entity 目录:存放和数据库对应的 Java POJO,一般是用 MyBatisX 等插件自动生成
mapper 目录:存放操作数据库的代码,基本没有自定义 SQL,都是复用了 MyBatis Plus 的方法,不做重点学习。
service 目录:存放业务逻辑处理代码,需要重点学习
- BlogServiceImpl:基于 Redis 实现点赞、按时间排序的点赞排行榜;基于 Redis 实现拉模式的 Feed 流,推荐学习
- FollowServiceImpl:基于 Redis 集合实现关注、共同关注,推荐学习
- ShopServiceImpl:基于 Redis 缓存优化店铺查询性能;基于 Redis GEO 实现附近店铺按距离排序,推荐学习
- UserServiceImpl:基于 Redis 实现短信登录(分布式 Session),推荐学习(虽然没有真的实现短信登录,而是通过日志打印验证码代替)
- VoucherOrderServiceImpl:基于 Redis 分布式锁、Redis + Lua 两种方式,结合消息队列,共同实现了秒杀和一人一单功能,非常值得学习
- VoucherServiceImpl:添加优惠券,并将库存保存在 Redis 中,为秒杀做准备。
utils 目录:存放项目内通用的工具类,需要重点学习
- CacheClient:封装了通用的缓存工具类,涉及泛型、函数式编程等知识点,值得学习
- RedisConstants:保存项目中用到的 Redis 键、过期时间等常量,值得学习
- RedisIdWorker:基于 Redis 的全局唯一自增 id 生成器,值得学习
- RedisTokenInterceptor:自动刷新 Redis 登录 Token 有效期,值得学习
- SimpleRedisLock:简单的 Redis 锁实现,了解即可,一般用 Redisson
- UserHolder:线程内缓存用户信息,可以学习
-
这个项目几乎用到了 Redis 的所有主流特性,非常适合已经学完 Spring Boot、还未系统学习过 Redis 的后端同学,其中秒杀功能、一人一单的实现需要格外重点学习。
-
课程质量极高,一句不少、一句不多、幽默风趣、百万 PPT,还能学到库表设计、代码抽象复用、JMeter 压力测试工具等实用知识。后端的初学者可以只看 p1 - p95、以及 p134 - p139 的最佳实践部分,高级篇和原理篇等把项目做完、且其他主流技术(如消息队列、微服务)学的差不多了,等面试前再看就行。
-
虽然项目的实现完整度一般,但是有难度的功能基本都实现了,建议有能力的同学把它完整实现,完全可以写在简历上。
-
在学习的过程中,可以多使用 Redis 可视化管理工具来观察数据的变化。比如 Quick Redis(https://quick123.net/)、RESP 等。
-
项目缺乏管理端,可以自行实现如店铺管理、点评审核等功能。
最后,我在 编程导航 给大家整理了一些有关该项目的亮点(也是学习重点)、都可以写在简历上,大家可以拿去参考~ (原谅我,一旦对外公开又会 “烂大街” 了)
此外,我做过的每个项目、给大家分享的每个项目的亮点也都持续整理在编程导航的知识库里(已经有 70 多个),帮助大家的简历脱颖而出。
如下图:
感谢大家的阅读,欢迎学编程的朋友们加入我的 编程导航 。可以加我微信 yupi5927,备注【加入编程导航】和自己的情况来 优惠 加入编程导航,不备注不通过,非诚勿扰谢谢。