
苍穹外卖总结文章目录苍穹外卖总结前言项目介绍技术栈核心技术项目架构个人感悟前言这篇文章粗略的总结了一下苍穹外卖的架构以及用到的技术栈、核心技术至于这些技术的具体使用已在对应的日记中写到了因此这里不再赘述。项目介绍这是一款为餐饮企业定制的产品分为管理端和用户端。用户端点单管理端处理订单的简易外卖软件。业务板块如下技术栈RedisRedis 是一个基于内存的高性能键值对数据库实际业务里主要拿来做缓存。用户端请求菜品数据时不会直接查 MySQL而是先查 Redis查到了直接返回查不到才去查 MySQL查完顺手把结果写进 Redis。因为数据存在内存里读写速度比磁盘上的 MySQL 快所以能扛住首页这种高并发访问MySQLMySQL 是一个关系型数据库负责把数据持久化地存到磁盘上是整个系统数据的最终归属。实际业务里Redis 缓存的只是热点数据员工、菜品、订单、用户这些核心数据最终全都落在 MySQL最大的特点是 用索引加速查询Spring BootSpring Boot 是一个快速开发框架核心思想是 约定优于配置引入一个 starter 依赖它就自动帮你把对应的组件配置好直接写业务代码就行。MyBatisMyBatis 是一个持久层框架专门负责 Java 对象和数据库之间的交互MyBatis 把JDBC繁琐的操作全封装了你只需要写 SQL 和定义接口它自动帮你执行并把结果集映射成 Java 对象核心技术JWTJWT 是一种无状态的用户认证方案解决的是怎么证明这个请求是已登录用户发的这个问题。关键点在于 服务端不存任何东西 所有信息都在 Token 里验签通过就认——这就叫无状态和传统的 Session 存在服务端内存里形成对比NginxNginx是一个高性能的 Web 服务器 专门负责处理 Web 请求在实际业务里客户端发送的请求先到Nginx然后再由Nginx转发到对应的服务端。在这个过程中客户端根本不知道你最后访问的是哪个服务端因此称为反向代理。这样的好处有几点1、解除前端和后端地址的耦合2、解决跨域问题3、统一入口多个请求到达nginx时nginx会将其按照一定的规则把请求分配出去这就是负载均衡。Spring CacheSpring Cache 是 Spring 提供的注解式缓存方案本质是用注解代替手写缓存代码Spring TaskSpring Task 是 Spring 自带的定时任务框架用注解就能让一个方法定时执行。WebSocketWebSocket 是一种全双工通信协议特点是 服务端可以主动给客户端推消息 。阿里云OSSOSS 是阿里云的对象存储服务专门用来存文件苍穹外卖里存的是菜品图片最简单的问题图片为什么不直接存自己服务器的磁盘因为服务器磁盘容量有限图片一多就满了而且用户访问图片要占用自己服务器的带宽。把图片传到 OSS 后拿到的是一个 URL用户访问这个 URL 时流量走的是阿里云自己的服务器只管存这个 URL 字符串。PageHelperPageHelper 是 MyBatis 的分页插件作用是你只管写查询 SQL分页它帮你加Swagger接口文档自动生成工具Controller 上注解一标网页上就能在线调接口。HttpClientJava 里发 HTTP 请求的工具苍穹外卖里用它调微信登录接口拿 openidPOI操作 Excel 的 Java 库苍穹外卖里用它把运营数据导出成 Excel 报表Git版本管理工具会 clone/pull/push/解决冲突就够Maven依赖管理和打包工具知道 pom.xml 是干嘛的、依赖冲突怎么排除就够项目架构个人感悟做完这个项目最大的感觉就是把学习到的都运用起来了虽然远不及面试、实习的强度但是我感觉到再学一些必要的知识接下来很多东西就差那么临门一脚了。除此之外很多需求并没有那么难实现那些看上去你不知道怎么做的东西 在后端逻辑都很简单的我们拿购物车举例就是设计一个数据库表shopping_cart 首先要知道 每个用户的购物车都是不一样的 所以数据库字段要有userid然后根据页面原型 知道前端传过来什么 后端传回去什么然后对应的设置DTO 与 VO至于业务逻辑 就要好好思考比如你添加购物车 要判断是否已经存在 如果存在 就是数量加一 不存在 就是向数据库里面插入一条数据插入的时候要补全所有字段还有减少购物车商品数量 你要判断他的数量是否大于1 如果大于 是number-1 然后update数据 如果数量1 那么要删除这个商品长达12天的中秋国庆假期学学玩玩也是终于把苍穹外卖结束了应该算是正式入门Java了。继续加油吧路还很长。莫道桑榆晚为霞尚满天。