查看原文
其他

我当年学编程时,要是有这个项目就好了

鱼皮 程序员鱼皮 2022-10-25

大家好,我是鱼皮。

之前已经给大家分享了三个全栈项目,比如瑞吉外卖什么的,这几个项目都是侧重于带大家学习框架的运用、以及一些简单的业务逻辑,但单独看代码就会发现没有太多的编程技巧可以学习。

这次给大家分享的项目则是一个专门用来学习 Redis 技术的 免费项目 —— 某马点评。事先说明,我可没有被绑架,而是前段时间我在复习 Redis 的时候把这个项目完整刷了一遍,觉得确实不错,才分享给大家。

这是我自己记录的笔记:

我当时学 Redis 的时候是先学会用法,再自己通过做项目来摸索其应用场景,根本没有这种系统的、项目实践式的教程。不得不感叹,现在学编程的资源真的是太丰富了、成本也越来越低了。

下面我带大家一起来学习下这个项目。

提示:本文超长,适合收藏

项目介绍

在线店铺点评 APP(H5 网页),有点类似美团点评。

特色:

  1. 项目整体比较精简,适合初学练手
  2. 项目中大量运用到了 Redis,极其适合学习 Redis 的同学来实战(事实上这个项目都是为了 Redis 课而生的)
  3. 项目的代码细节很多,能学到不少优化技巧

项目功能

包括:查看点评(热评)、发布点评、点赞

关注、查询关注的人发的帖子、查看好友共同关注

分类浏览店铺、查看附近的店铺

个人信息查看和管理

话说项目太仿真了,在用户编辑资料页竟然还能开 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:线程内缓存用户信息,可以学习

学习建议

  1. 这个项目几乎用到了 Redis 的所有主流特性,非常适合已经学完 Spring Boot、还未系统学习过 Redis 的后端同学,其中秒杀功能、一人一单的实现需要格外重点学习。
  2. 课程质量极高,一句不少、一句不多、幽默风趣、百万 PPT,还能学到库表设计、代码抽象复用、JMeter 压力测试工具等实用知识。后端的初学者可以只看 p1 - p95、以及 p134 - p139 的最佳实践部分,高级篇和原理篇等把项目做完、且其他主流技术(如消息队列、微服务)学的差不多了,等面试前再看就行。
  3. 虽然项目的实现完整度一般,但是有难度的功能基本都实现了,建议有能力的同学把它完整实现,完全可以写在简历上。
  4. 在学习的过程中,可以多使用 Redis 可视化管理工具来观察数据的变化。比如 Quick Redis(https://quick123.net/)、RESP 等。
  5. 项目缺乏管理端,可以自行实现如店铺管理、点评审核等功能。



最后,我在 星球 给大家整理了一些有关该项目的亮点(也是学习重点)、都可以写在简历上,大家可以拿去参考~ (原谅我,一旦对外公开又会 “烂大街” 了)

项目亮点地址:https://t.zsxq.com/07JMnQvne

此外,我做过的每个项目、给大家分享的每个项目的亮点也都持续整理在星球的知识库里(已经有 70 多个),帮助大家的简历脱颖而出。

如下图:

感谢大家的阅读,欢迎学编程的朋友们加入我的 编程知识星球 。可以加我微信 yupi5927,备注【加入星球】和自己的情况来 优惠 加入星球,不备注不通过,非诚勿扰谢谢。

往期推荐

我的学习小圈子

我做了一款生成代码+数据的神器!

2022 年,前端都在用什么开发?

出息了,自己做一个短链服务

几个优秀的开源项目,看看你用过几个?

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存