我当年学编程时,要是有这个项目就好了
大家好,我是鱼皮。
之前已经给大家分享了三个全栈项目,比如瑞吉外卖什么的,这几个项目都是侧重于带大家学习框架的运用、以及一些简单的业务逻辑,但单独看代码就会发现没有太多的编程技巧可以学习。
这次给大家分享的项目则是一个专门用来学习 Redis 技术的 免费项目 —— 某马点评。事先说明,我可没有被绑架,而是前段时间我在复习 Redis 的时候把这个项目完整刷了一遍,觉得确实不错,才分享给大家。
这是我自己记录的笔记:
我当时学 Redis 的时候是先学会用法,再自己通过做项目来摸索其应用场景,根本没有这种系统的、项目实践式的教程。不得不感叹,现在学编程的资源真的是太丰富了、成本也越来越低了。
下面我带大家一起来学习下这个项目。
提示:本文超长,适合收藏
项目介绍
在线店铺点评 APP(H5 网页),有点类似美团点评。
特色:
项目整体比较精简,适合初学练手 项目中大量运用到了 Redis,极其适合学习 Redis 的同学来实战(事实上这个项目都是为了 Redis 课而生的) 项目的代码细节很多,能学到不少优化技巧
项目功能
包括:查看点评(热评)、发布点评、点赞
关注、查询关注的人发的帖子、查看好友共同关注
分类浏览店铺、查看附近的店铺
个人信息查看和管理
话说项目太仿真了,在用户编辑资料页竟然还能开 VIP?!🐶
项目资料
快速导学视频:https://www.bilibili.com/video/BV1PG4y1s7io
原课程视频地址:https://www.bilibili.com/video/BV1cr4y1671t
这个项目没有专门的课程,而是融合在了 Redis 的教程中,可以从 P24 开始看。
星球 的同学也可以直接获取我整理好的代码 + 学习资料 + 原创笔记 + 简历亮点:https://t.zsxq.com/07JMnQvne
技术栈
后端
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 等。 项目缺乏管理端,可以自行实现如店铺管理、点评审核等功能。
最后,我在 星球 给大家整理了一些有关该项目的亮点(也是学习重点)、都可以写在简历上,大家可以拿去参考~ (原谅我,一旦对外公开又会 “烂大街” 了)
项目亮点地址:https://t.zsxq.com/07JMnQvne
此外,我做过的每个项目、给大家分享的每个项目的亮点也都持续整理在星球的知识库里(已经有 70 多个),帮助大家的简历脱颖而出。
如下图:
感谢大家的阅读,欢迎学编程的朋友们加入我的 编程知识星球 。可以加我微信 yupi5927,备注【加入星球】和自己的情况来 优惠 加入星球,不备注不通过,非诚勿扰谢谢。
往期推荐