微服务总结
一、服务调用服务拆分之后,不可避免的会出现跨微服务的业务,此时微服务之间就需要进行远程调用。微服务之间的远程调用被称为RPC,即远程过程调用。RPC的实现方式有很多,比如:
基于Http协议
基于Dubbo协议
1.RestTemplateSpring给我们提供了一个RestTemplate的API,可以方便的实现Http请求的发送。
使用RestTemplate的基本步骤如下
注册RestTemplate到Spring容器
调用RestTemplate的API发送请求,常见方法有:
getForObject:发送Get请求并返回指定类型对象
PostForObject:发送Post请求并返回指定类型对象
put:发送PUT请求
delete:发送Delete请求
exchange:发送任意类型请求,返回ResponseEntity
利用RestTemplate发送http请求与前端ajax发送请求非常相似,包含以下信息:
1 请求路径
2 请求方式
3 请求体
4 返回值类型
5 请求参数
案例代码123456789// 2.查询商品ResponseEntity&l ...
黑马点评项目总结
一、项目介绍八股介绍:之后再补吧。。。。。词穷了
这个项目主要是基于redis相关内容进行展开的,主要实现了用户登录、抢票、点赞、评论、关注等类似社交软件的功能。
二、短信登录1.简介短信登录逻辑是用户填入手机号和短信验证码来校验用户信息。此外,该登录功能还包含了注册,即未注册过的手机号进行登录时,将会默认注册为一个新用户。
2.验证码的获取验证码缓存用户发起获取短信验证码请求时,后端会先随机生成一个6位数验证码,以login:phone:填入的手机号为key,将验证码存入redis中。随后调用短信相关的api,给对应的手机号发送验证码。
1234567891011121314151617@Overridepublic Result sendCode(String phone, HttpSession session) { //1.校验手机号 if (RegexUtils.isPhoneInvalid(phone)){ return Result.fail("非法手机号"); } //2.生成验证码 ...
Linux学习笔记
&&和||&&:从前往后执行,有一个失败则不继续执行
||:从前往后执行,有一个成功则不继续执行
例子:ping www.hdu.com -c 10 -w 10 && echo success || echo failure
-c:发送数据包的次数
-w:总体超时时间,整个ping的最大运行时长
重定向输出重定向 >:将标准输出以覆盖原文件的方式写入
>>:将标准输出追加方式写入
输入重定向<:用于将文件的内容作为输入传递给命令。
<<:用于将多行文本(自己输入的)作为输入传递给命令,适合在脚本中嵌入多行文本。
用法和<有区别,这个后面跟的是分隔符–用于多行输入时终止输入的标志。例如cat << EOF
下图所示的stop是终止输入的标志。
<<<:用于单行字符串的输入
带&的重定向前置知识点:文件描述符
0标准输入stdin按键
1标准输出stdout屏幕
2标准错误输出stderr屏幕
&>:将标准输出和错误输出重定向到文件中。
类似于部 ...
Redis最佳实践
1.键值设计优雅的key结构key的最佳实践约定
1.遵循基本格式:**[业务名称]:[数据名]:[id]**
2.长度不超过44字节
3.不包含特殊字符
优点
可读性强
避免key冲突
方便管理
更节省内存:key是string类型,底层编码包含int,embstr和raw三种。embstr在小于44字节使用,采用连续内存空间,内存占用更小。raw模式下,内存空间不是连续的,而是会采用指针形式指向其他空间。
拒绝BigKey什么是BigKey
key本身的数据量过大,比如一个key的值就占了5MB。
key中的成员数过多,比如一个ZSET类型的key,它的成员数量为10000个。
key中成员的数据量过大,比如一个Hash类型的key,它的成员数量虽然只有1000个,但这些value的总大小为100MB。
推荐值:
单个key的value小于10kb
对于集合类型的key,建议元素数量小于1000
选择合理的数据结构
2.批处理优化单个命令的执行流程一次命令响应时间=一次往返的网络传输所耗的时间 + 1次redis执行命令耗时
问题:一次命令响应时间耗费时 ...
黑马点评笔记
1.缓存机制数据一致性:先修改数据库再删除redis缓存。先删缓再删数据发生线程安全的问题更大,因为数据库修改数据耗时长,可能删了缓存后在数据库信息修改还没好之前,又读取了该信息并缓存了。
2.缓存穿透客户端访问数据库中不存在的数据,缓存永远不生效,可能会被恶意攻击数据库导致瘫痪。方法1.缓存空对象 2.布隆过滤
3.缓存雪崩指的是同一时间段内,redis中大量的缓存的key同时失效或者redis服务器宕机了,导致有大量请求到达数据库,带来巨大压力解决方法:1.给TTL添加随机值 2.利用redis集群 3.给缓存业务添加降级限流策略(微服务内容)4.添加多级缓存
4.缓存击穿指的是某一个被高并发访问并且该缓存重建业务较复杂的key突然失效了,导致大量请求到达数据库,带来巨大冲击。解决方法:1.添加互斥锁到redis中 2.逻辑过期
实战通用的redis缓存工具12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 ...
RabbitMq
RabbitMq消息队列总结参考黑马教程day06-MQ基础 - 飞书云文档
1.概述RabbitMQ是基于Erlang语言开发的开源消息通信中间件,官网地址:
https://www.rabbitmq.com/
使用背景:同步调用在微服务项目中,我们使用的OpenFeign都是同步调用,可以理解为阻塞,只有当前任务执行完毕才能往下执行,同步调用存在以下问题:
第一,拓展性差
在大多数电商业务中,用户支付成功后都会以短信或者其它方式通知用户,告知支付成功。假如后期产品经理提出这样新的需求,你怎么办?是不是要在上述业务中再加入通知用户的业务?
某些电商项目中,还会有积分或金币的概念。假如产品经理提出需求,用户支付成功后,给用户以积分奖励或者返还金币,你怎么办?是不是要在上述业务中再加入积分业务、返还金币业务?
由此可见,服务会越来越臃肿。
第二,性能下降
由于我们采用了同步调用,调用者需要等待服务提供者执行完返回结果后,才能继续向下执行,也就是说每次远程调用,调用者都是阻塞等待状态。最终整个业务的响应时长就是每次远程调用的执行时长之和。
第三,级联失败
由于我们是基于OpenFeig ...
Docker学习
Docker内容参考黑马文档day02-Docker - 飞书云文档
镜像定义什么是镜像:将应用所需的函数库、依赖、配置等与应用一起打包得到的就是镜像。
简单来说类似于网上下的学习版游戏压缩包。
以下是镜像查询命令显示的结果
1234[root@server01 tar]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEdocker.1ms.run/library/nginx latest 97662d24417b 7 days ago 192MBdocker.1ms.run/library/mysql latest c013d3763e14 3 weeks ago 797MB
参数解释:
REPOSITORY(仓库):
镜像的仓库名称,类似于软件包的来源。
例如:
docker.1ms.run/library/nginx:表示从docker.1ms.run镜像源拉取的nginx镜像。
nginx:如果直接写nginx ...
Redis持久化
redis持久化指的是把内存中的数据写入磁盘中。因为redis是基于内存进行数据存储的,当服务器关闭或者重启时,内存中的数据会丢失,所以需要通过持久化机制,来把数据定期自动或者按需手动保存到磁盘中,以便服务器启动时恢复数据。实现方法分为如下两种
1.RDB(Redis DataBase)是什么:在指定的时间间隔内,执行数据集的时间点快照,快照文件就是RDB文件(例如dump.rdb)。当Redis重启时,会加载这个.rdb文件,直接将文件中的数据加载到内存中。
相关配置位于redis.conf配置文件的snapshot模块中
save <seconds> <changes> [<seconds> <changes> ...] 大概位于第440行用于配置使时间间隔和数据修改次数,及每个一段固定时间查看当前redis修改数据的次数,超过了设定的i修改次数则进行快照。
dir 文件位置(例如 /root/myredis/dumpfiles) 大概位于第510行用于设置rdb文件存放的位置
dbfilename ...
尚庭公寓
本文总结了尚庭公寓项目中遇到的技术知识点。
1.项目目录结构设计12345678910111213141516lease├── common(公共模块——工具类、公用配置等)│ ├── pom.xml (包含公共模块编写所需的全部依赖)│ └── src├── model(数据模型——与数据库相对应地实体类)│ ├── pom.xml (包含数据模型编写所需的全部依赖)│ └── src├── web(Web模块)│ ├── pom.xml (包含common和model这个两个模块的依赖,以及该模块下所需的其他依赖)│ ├── web-admin(后台管理系统Web模块——包含mapper、service、controller)│ │ ├── pom.xml (做为web模块的子类项目)│ │ └── src│ └── web-app(移动端Web模块——包含mapper、service、controller)│ ├── pom.xml│ └── src└── pom.xml (统一管理子模块所有的依赖版本号)
根 ...
Mybatis+MybatisPlus总结
一、Mybatis简介
mybatis类似于jdbcTemplate,它是一个封装了java对数据库操作的一个依赖,相比于jdbcTemplate,感觉可用性更好。
二、实战