RabbitMQ
MQ相关信息1.MQ(message queue)本质是个队列,同样是先进先出原则,但在队列中存放的是message,
而且它还是一种跨进程的通信机制,用于上下游传递信息,在互联网架构中,MQ是一种
非常常见的上下游”逻辑解耦和物理解耦”的消息通信服务。在使用它后,消息发送的上游
只需要依赖MQ,不再需要其他服务
2.使用MQ的优势
①流量消峰
在请求直接访问订单系统直接添加mq,形成消息队列,保护了订单系统
优点在于保护了系统,避免宕机出现,缺点在于请求处理效率降低,因为队列的原因
②应用解耦
在添加mq之前,订单系统是可以直接调用其他系统,而在这个过程中,任一系统处理出现异常
都会造成下单业务的失败,在添加mq后,订单系统是直接发消息给mq,其他系统的调用是由mq
进行监督的,若其他系统出现异常则不会影响下单业务,因为在它发消息给mq之后,其业务流程
已然完成,剩下的事情全部由mq进行监督处理。
③异步处理
例如下图,线程a需要调用线程b,但线程b的完成需要很长时间,而线程a又必须知道其什么时候
完成,在使用mq之前,线程a只能不断的调用api去轮询线程b,效率较低 ...
SpringBoot+MyBatis+BootStrap3.0前后端不分离项目
前置介绍
项目介绍:基于SpringBoot+Mybatis+BootStrap3.0前后端不分离的项目
项目功能 :
①登录、注册、集成kaptcha验证码防止机器人,以及用户管理(用户信息的修改)
②分页处理展示商品信息、支持通过模糊搜索查找相关商品
③购物车相关功能管理(如购物车商品的展示和结算)
④订单管理页面可以查看不同状态订单以及集成了支付宝沙箱模拟商品支付全过程
⑤收藏界面同样实现分页展示用户收藏商品信息,以及加入收藏、取消收藏和加入购物车
⑥对全部业务方法使用aop拦截计算业务执行时间,为后续优化提供支持
环境搭建基本环境:
1.jdk 1.8
2.maven 3.6.2
3.数据库 mysql 8.0.26
4.集成开发环境 IDEA2020
用户管理创建数据库1CREATE DATABASE IF NOT EXISTS `computer_store` CHARACTER SET 'utf8';
创建数据表12345678910111213141516CREATE TABLE t_user ( uid INT AUTO_INCREM ...
如何在Linux上部署SpringBoot项目?
部署前的准备工作1.服务器:服务器选择的是腾讯云centos7系统的轻量服务器
2.通过xshell + xftp 连接linux服务器和上传所需的软件包
①上传jdk8的linux安装包并解压安装 –> 官方下载网址
12345678910111213141516171819//解压安装包tar -zxvf jdk-8u291-linux-x64.tar.gz //重命名解压出来的文件mv jdk1.8.0_291/ jdk1.8//移动到别的地方mv jdk1.8 /usr/local///修改配置文件vim /etc/profile//进行jdk的环境配置export JAVA_HOME=/usr/local/jdk1.8export CLASSPATH=$:CLASSPATH:$JAVA_HOME/lib/export PATH=$PATH:$JAVA_HOME/bin///配置完成之后需要重新刷新配置 否则java-version是没提示的source /etc/profile
②安装docker 参考菜鸟教程 –> centos7安装docker
可以使 ...
SpringBoot+Vue的前后端分离项目
前置介绍项目介绍:前端采用Vue3.0 + element-plus,后端采用Springboot + MyBatis-plus的前后端分离项目
Vue前端项目结构
public :
index.html :将vue文件进行编译后展示出来
src :
assets :存储静态资源(CSS样式、图片资源等)
componments:公共组件(把一些代码通过组件的方式进行打包,变成一个vue文件,以达到在别的界面进行引入的作用)
router(路由):将页面请求路径与vue文件形成映射关系
store:储存页面定义的变量
views:存储视图
第一个页面页面主要由 头部导航栏 + 侧边菜单栏 + 主体展示内容组成 ,每个部分都是一个单独的vue组件
12345678910111213141516171819202122232425<template> <!-- 头部--> <Header/> <!-- 主体--> <div style="display:flex"> < ...
MyBatis-Plus
前置知识MyBatis-plus的框架结构
通过扫描指定的实体类 –> 反射抽取实体类的属性 –> 分析是对应哪张表已经查询的字段
–> 最终形成查询的sql语句 –> 将sql语句注入mybatis的容器中
配置数据源
1234567891011121314spring: datasource: # 配置数据源的类型 type: com.zaxxer.hikari.HikariDataSource # 配置数据源的各个信息 url: jdbc:mysql://localhost:3306/mybatis_plus?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver# 在控制台打印mybatis-plus生成的sql查询语句m ...
Volatile关键字
现代计算机的内存模型实早期计算机中cpu和内存的速度是差不多的,但在现代计算机中,cpu的指令速度远超内存的存取速度,由于计算机的存储设备与处理器的运算速度有几个数量级的
差距,所以现代计算机系统都不得不加入一层读写速度尽可能接近处理器运算速度的高速缓存(Cache)来作为内存与处理器之间的缓冲。
将运算需要使用到的数据复制到缓存中,让运算能快速进行,当运算结束后再从缓存同步回内存之中,这样处理器就无须等待缓慢的内存读写了。
基于高速缓存的存储交互很好地解决了处理器与内存的速度矛盾,但是也为计算机系统带来更高的复杂度,因为它引入了一个新的问题:缓存一致性(CacheCoherence)。
在多处理器系统中,每个处理器都有自己的高速缓存,而它们又共享同一主内存(MainMemory)。
JMMJava内存模型(JavaMemoryModel)描述了Java程序中各种变量(线程共享变量)的访问规则,以及在JVM中将变量,存储到内存和从内存中读取变量这样的底层细
节。
本地内存和主内存的关系:
数据的可见性数据的可见性:当一个数据出现变化后,其他地方获取的数据与修改后的数据保持一致。 ...
SpringBoot
SpringBoot概述SpringBoot程序创建①对Maven进行设定
12345678910111213141516171819<mirror> <id>nexus-aliyun</id> <mirrorOf>central</mirrorOf> <name>Nexus aliyun</name> <url>http://maven.aliyun.com/nexus/content/groups/public</url></mirror><profile><id>jdk-1.8</id><activation> <activeByDefault>true</activeByDefault> <jdk>1.8</jdk> </activation><properties> <maven.compiler.source>1.8</ ...
Spring注解驱动
容器注解+配置类创建容器本质与xml文件一样,只不过是使用大量注解替代了xml文件的编写
使用配置类代替xml配置文件
12345678910111213@Configuration //告诉Spring这是一个配置类//扫描sring包下的组件,且排除类型为Controller的注解,不加入此容器@ComponentScan(basePackages = "spring",includeFilters = { @ComponentScan.Filter(type = FilterType.ANNOTATION, classes ={Controller.class})}) public class SpringConfig { @Bean("person") //将此方法生成的对象交给spring的IOC容器进行管理 //对象类型为方法的返回值类型,默认是使用方法名作为id的标识 public ...
Redis
NoSQL数据库概述NoSQL是为了解决性能问题而产生的一种技术,Redis是一种以键值型存储数据的典型NoSQL数据库
Nosql数据库的出现有利于解决服务器CPU和内存、以及IO读写的的巨大压力
Nosql数据库不遵循SQL标准,不支持ACID四个属性(并不是不支持事务),远超于SQL性能
用不着sql的和用了sql也不行的情况,可以考虑用NoSql数据库
Redis是单线程+IO多路复用技术,支持多种数据类型的数据,可以持久化,也是保存在内存中
每一个Redis对应一个服务器
IO多路复用:单线程或单进程同时监测若干个 文件描述符 是否可以执行IO操作的能力。
MemCached使用的是多线程+锁,MemCached只支持单一类型的数据,且不能持久化,只能保存在内存中
Redis常用五大数据类型Redis键(key)
常用命令
命令的说明
keys *
查看当前库所有key
exists key
判断某个key是否存在
type key
查看你的key是什么类型
del key
删除指定的key数据
unlink key
根据value选择非阻 ...
Git
GitGit是一个免费的、开源的分布式版本控制系统。
版本控制:记录文件修改的历史记录,以便后续的查阅和修改以及方便版本切换
Git的常用命令
git切换版本,其底层实际是移动的HEAD指针,通过git reset –hard 这一命令不断改变master对不同版本的指针指向
Git分支操作分支:在版本控制过程中,使用多条线同时推进多个任务
1.分支的作用:
①同时并行推进多个功能开发,提高开发效率
②各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。
2.分支的常用命令
命令名称
作用
git branch 分支名
创建分支
git branch -v
查看分支
git checkout 分支名
切换分支
git merge 分支名
把指定的分支合并到当前分支上
合并分支会出现的特殊情况:产生冲突
合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改。
Git 无法替 我们决定使用哪一个。必须人为决定新代码内容。
解决方法:编辑有冲突的文件,删除特殊符号,决定要使用的内容
master、hot- ...