瑞吉外卖项目优化-Day02
瑞吉外卖项目优化-Day02课程内容
MySQL主从复制
读写分离案例
项目实现读写分离
Nginx-概述
Nginx-命令
Nginx-应用
前言
1). 存在的问题
在前面基础功能实现的过程中,我们后台管理系统及移动端的用户,在进行数据访问时,都是直接操作数据库MySQL的。结构如下图:
而在当前,MySQL服务器只有一台,那么就可能会存在如下问题:
1). 读和写所有压力都由一台数据库承担,压力大
2). 数据库服务器磁盘损坏则数据丢失,单点故障
2). 解决方案
为了解决上述提到的两个问题,我们可以准备两台MySQL,一台主(Master)服务器,一台从(Slave)服务器,主库的数据变更,需要同步到从库中(主从复制)。而用户在访问我们项目时,如果是写操作(insert、update、delete),则直接操作主库;如果是读(select)操作,则直接操作从库(在这种读写分离的结构中,从库是可以有多个的),这种结构我们称为 读写分离 。
今天我们就需要实现上述的架构,来解决业务开发中所存在的问题。
1. MySQL主从复制MySQL数据库默认是支持主从复 ...
瑞吉外卖项目优化-Day01
瑞吉外卖项目优化-Day01课程内容
环境搭建
缓存短信验证码
缓存菜品信息
SpringCache
缓存套餐数据
前言
1). 当前系统存在的问题
之前我们已经实现了移动端菜品展示、点餐、购物车、下单等功能,但是由于移动端是面向所有的消费者的,请求压力相对比较大,而我们当前所有的数据查询都是从数据库MySQL中直接查询的,那么可能就存在如下问题: ==频繁访问数据库,数据库访问压力大,系统性能下降,用户体验较差。==
2). 解决该问题的方法
要解决我们上述提到的问题,就可以使用我们前面学习的一个技术:Redis,通过Redis来做缓存,从而降低数据库的访问压力,提高系统的访问性能,从而提升用户体验。加入Redis做缓存之后,我们在进行数据查询时,就需要先查询缓存,如果缓存中有数据,直接返回,如果缓存中没有数据,则需要查询数据库,再将数据库查询的结果,缓存在redis中。
1. 环境搭建1.1 版本控制接下来,我们就需要对我们的功能进行优化,但是需要说明的是,我们不仅仅要对上述提到的缓存进行优化,还需要对我们程序的各个方面进行优化。 ...
Vmware虚拟机问题解决方案
Vmware虚拟机问题解决方案1. 运行虚拟机系统蓝屏可能的原因有两个:
1). 虚拟机所在磁盘的空间不足 ; ——-> 清理磁盘空间 。
2). 操作系统版本高, 需要适配新版本的Vmware ; ——> 卸载Vmware15版本, 安装Vmware16版本 。
2. 卸载Vmware步骤1). 卸载已经安装的VMware
弹出确认框, 点击”下一步”:
下一步之后, 选择删除:
选择下一步,继续删除:
点击 “删除” 按钮:
卸载完成:
同时, 进入磁盘目录, 查看VMware 的安装目录, 查看文件夹是否为空:
退出到VMware这层目录, 右键删除”VMware”文件夹,删除完成:
2). 清理注册表
卸载Vmware之后, 一定一定要清理Vmware的注册表信息 ;
A. 按住Windows + R , 在弹出框中输入 “regedit” 调出注册表
B. 打开“HKEY_CURRENT_USER”文件夹,找到“Software”文件夹并打开
C. 找到“VMware.Inc”,右键删除
3). 安装VMware ...
Linux-Day02
Linux-Day02课程内容
软件安装
项目部署
1. 软件安装1.1 软件安装方式在Linux系统中,安装软件的方式主要有四种,这四种安装方式的特点如下:
安装方式
特点
二进制发布包安装
软件已经针对具体平台编译打包发布,只要解压,修改配置即可
rpm安装
软件已经按照redhat的包管理规范进行打包,使用rpm命令进行安装,==不能自行解决库依赖问题==
yum安装
一种在线软件安装方式,本质上还是rpm安装,自动下载安装包并安装,安装过程中自动解决库依赖问题(安装过程需要联网)
源码编译安装
软件以源码工程的形式发布,需要自己编译打包
1.2 安装JDK上述我们介绍了Linux系统软件安装的四种形式,接下来我们就通过第一种(二进制发布包)形式来安装JDK。 JDK对应的二进制发布包,在课程资料中已经提供,如下:
yum安装参考连接:https://blog.csdn.net/qq_22183465/article/details/85209791
1echo 'LANG="en_U ...
Linux-Day01
Linux-Day01课程内容
Linux简介
Linux安装
Linux常用命令
1. 前言1.1 什么是Linux
Linux是一套免费使用和自由传播的操作系统。说到操作系统,大家比较熟知的应该就是Windows和MacOS操作系统,我们今天所学习的Linux也是一款操作系统。
1.2 为什么要学Linux那么我们为什么要学习Linux呢,主要出于两个方面的原因。
1). 企业用人要求
以下,是从知名招聘网站上搜索的java开发工程师的岗位要求,在很多的岗位要求中都提到了Linux操作系统的经验。
为什么作为javaEE开发工程师,企业还要求我们会Linux操作系统的相关知识呢?
这是因为Linux操作系统提供了很多稳定的发行版本,广泛的应用在我们的各种服务器操作系统领域,我们将来开发出来的项目,最终要上线运行,就需要将项目部署在Linux服务器中。
2). 个人发展需要
我们作为javaEE开发工程师,将来在企业中开发时会涉及到很多的数据库、中间件等技术,比如MySQL、Redis、MQ等技术,而这些应用软件大多都是需要安装在Linux系统中使用的。我们做为开发人员, ...
Git课程讲义
Git 分布式版本控制工具课程内容
Git概述
Git代码托管服务
Git常用命令
在IDEA中使用Git
1. 前言1.1 什么是GitGit是一个分布式版本控制工具,主要用于管理开发过程中的源代码文件(Java类、xml文件、html页面等),在软件开发过程中被广泛使用。
在IDEA开发工具中可以集成Git(后面会讲解Git安装和集成过程):
集成后在IDEA中可以看到Git相关图标:
可以通过启动两个IDEA窗口模拟两个开发人员来展示Git的使用:
其他的版本控制工具:
SVN
CVS
VSS
1.2 使用Git能做什么
代码回溯:Git在管理文件过程中会记录日志,方便回退到历史版本
版本切换:Git存在分支的概念,一个项目可以有多个分支(版本),可以任意切换
多人协作:Git支持多人协作,即一个团队共同开发一个项目,每个团队成员负责一部分代码,通过Git就可以管理和协调
远程备份:Git通过仓库管理文件,在Git中存在远程仓库,如果本地文件丢失还可以从远程仓库获取
2. Git概述2.1 Git简介Git 是一个分布式版本控制工具,通常用来对软件开发过程中的源代码文 ...
Redis基础课程讲义
Redis基础课程内容
Redis入门
Redis数据类型
Redis常用命令
在Java中操作Redis
1. 前言1.1 什么是RedisRedis是一个基于内存的key-value结构数据库。Redis 是互联网技术领域使用最为广泛的存储中间件,它是「Remote Dictionary Service」的首字母缩写,也就是「远程字典服务」。
基于内存存储,读写性能高
适合存储热点数据(热点商品、资讯、新闻)
企业应用广泛
1.2 使用Redis能做什么
数据缓存
消息队列
注册中心
发布订阅
2. Redis入门2.1 Redis简介Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache, and message broker. 翻译为:Redis是一个开源的内存中的数据结构存储系统,它可以用作:数据库、缓存和消息中间件。
官网:https://redis.io
Redis是用C语言开发的一个开源的高性能键值对(k ...
瑞吉外卖-Day06
瑞吉外卖-第六天课程内容
用户地址簿功能
菜品展示
购物车
下单
1. 用户地址簿功能1.1 需求分析地址簿,指的是移动端消费者用户的地址信息,用户登录成功后可以维护自己的地址信息。同一个用户可以有多个地址信息,但是只能有一个默认地址。
对于地址簿管理,我们需要实现以下几个功能:
新增地址
地址列表查询
设置默认地址
编辑地址
删除地址
1.2 数据模型用户的地址信息会存储在address_book表,即地址簿表中。具体表结构如下:
这里面有一个字段is_default,实际上我们在设置默认地址时,只需要更新这个字段就可以了。
1.3 导入功能代码对于这一类的单表的增删改查,我们已经写过很多了,基本的开发思路都是一样的,那么本小节的用户地址簿管理的增删改查功能,我们就不再一一实现了,基本的代码我们都已经提供了,直接导入进来,做一个测试即可。
对于下面的地址管理的代码,我们可以直接从资料拷贝,也可以直接从下面的讲义中复制。
1). 实体类 AddressBook(直接从课程资料中导入即可)
所属包: com.itheima.reggie.entity
12345 ...
瑞吉外卖-Day05
瑞吉外卖-第五天课程内容
新增套餐
套餐分页查询
删除套餐
短信发送
手机验证码登录
1. 新增套餐1.1 需求分析套餐就是菜品的集合。
后台系统中可以管理套餐信息,通过新增套餐功能来添加一个新的套餐,在添加套餐时需要选择当前套餐所属的套餐分类和包含的菜品,并且需要上传套餐对应的图片,在移动端会按照套餐分类来展示对应的套餐。
1.2 数据模型新增套餐,其实就是将新增页面录入的套餐信息插入到setmeal表,还需要向setmeal_dish表插入套餐和菜品关联数据。所以在新增套餐时,涉及到两个表:
表
说明
备注
setmeal
套餐表
存储套餐的基本信息
setmeal_dish
套餐菜品关系表
存储套餐关联的菜品的信息(一个套餐可以关联多个菜品)
两张表具体的表结构如下:
1). 套餐表setmeal
在该表中,套餐名称name字段是不允许重复的,在建表时,已经创建了唯一索引。
2). 套餐菜品关系表setmeal_dish
在该表中,菜品的名称name,菜品的原价price 实际上都是冗余字段,因为我们在这张表中存储了菜品的I ...
瑞吉外卖-Day04
瑞吉外卖-Day04课程内容
文件上传下载
菜品新增
菜品分页查询
菜品修改
1. 文件上传下载1.1 上传介绍1.1.1 概述文件上传,也称为upload,是指将本地图片、视频、音频等文件上传到服务器上,可以供其他用户浏览或下载的过程。文件上传在项目中应用非常广泛,我们经常发微博、发微信朋友圈都用到了文件上传功能。
文件上传时,对页面的form表单有如下要求:
表单属性
取值
说明
method
post
必须选择post方式提交
enctype
multipart/form-data
采用multipart格式上传文件
type
file
使用input的file控件上传
1.1.2 前端介绍1). 简单html页面表单
1234<form method="post" action="/common/upload" enctype="multipart/form-data"> <input name="myFile" type=&qu ...