认识通讯协议——TCP/IP、UDP协议的区别,HTTP通讯协议的理解

在这里插入图片描述

目录

  • 引出
  • 认识通讯协议
    • 1、TCP/IP协议,UDP协议的区别
    • 2、HTTP通讯协议的讲解
  • Redis冲冲冲——缓存三兄弟:缓存击穿、穿透、雪崩
    • 缓存击穿
    • 缓存穿透
    • 缓存雪崩
  • 总结

引出

认识通讯协议——TCP/IP、UDP协议的区别,HTTP通讯协议的理解


认识通讯协议

1、TCP/IP协议,UDP协议的区别

属于底层的通讯协议

三次握手的目的:保证连接一定创建成功

在这里插入图片描述

一问一答的目的:保证数据一定传输成功,保证数据永远不丢失

在这里插入图片描述

四次挥手的目的:保证连接一定断开成功,且清理到位!

在这里插入图片描述

Java程序连接MySQL数据库时,第1次 是不都很慢?因为:它在建立连接 通讯协议是:MYSQL协议,底层依旧是:TCP/IP协议


UDP协议:类似于 写信,发短信,不依赖于连接 导致:信息丢失

TCP/IP协议,UDP协议,都是网络传输协议!在它们的基础之上,可能会衍生出非常多的上层协议,比如:HTTP HTTPS MYSQL POP3 ……

2、HTTP通讯协议的讲解

是属于TCP/IP协议的上层协议,所以它也存在:3次握手,4次挥手的过程,它同样也依赖于连接!

HTTP版本:1.0 1.1(使用最为广泛) 2.0

1.0 每个请求都会创建一个连接,请求完毕,连接断开

1.1 每个文件对应创建一个连接,同一个文件发出的请求,可以共享对应的连接,文件关闭连接关闭

2.0 每个浏览器对应创建一个连接,同一个浏览器发出的请求, 可以共享对应的连接,浏览器关闭连接关闭

版本更新的目的是:尽量的减少连接创建&销毁的过程,做到连接复用

HTTP通讯协议的分类:请求,响应

HTTP请求协议:请求行,请求头,空行,请求体

请求行:请求方式(GET/POST) URL HTTP协议版本号

请求头:告诉服务端,浏览器的相关信息

空行:分割请求头 & 请求体

请求体:用于在POST时,传输数据

在这里插入图片描述

对应的响应协议:

状态行:协议版本,状态码以及状态码的描述(200,400,404,405,302,500)

响应头:后端服务器的相关信息

空行:分割响应头 & 响应体

响应体:响应数据的东西

在这里插入图片描述

Redis冲冲冲——缓存三兄弟:缓存击穿、穿透、雪崩

缓存击穿

缓存击穿:redis中没有,但是数据库有

顺序:先查缓存,判断缓存是否存在;如果缓存存在,直接返回数据;如果缓存不存在,則查询数据库,将数据库的数据存入到缓存

在这里插入图片描述

解决方案:将热点数据设置过期时间长一点;针对数据库的热点访问方法上分布式锁;

缓存穿透

缓存穿透:redis中没有,数据库也没有

在这里插入图片描述

解决方案:

(1)将不存在的key,在redis设置值为null;

(2)使用布隆过滤器;

原理:https://zhuanlan.zhihu.com/p/616911933

在这里插入图片描述

布隆过滤器:

如果确认key不存在于redis中,那么就一定不存在;

它说key存在,就有可能存在,也可能不存在! (误差)

在这里插入图片描述

布隆过滤器

1、根据配置类中的 key的数量 ,误差率,计算位图数组【二维数组】

2、通过布隆过滤器存放key的时候,会计算出需要多少个hash函数,由hash函数算出多少个位图位置需要设定为1

3、查询时,根据对应的hash函数,判断对应的位置值是否都为1;如果有位置为0,则表示key一定不存在于该redis服务器中;如果全部位置都为1,则表示key可能存在于redis服务器中;

缓存雪崩

缓存雪崩:

Redis的缓存雪崩是指当Redis中大量缓存数据同时失效或者被清空时,大量的请求会直接打到数据库上,导致数据库瞬时压力过大,甚至宕机的情况。

造成缓存雪崩的原因主要有两个:

1.相同的过期时间:当Redis中大量的缓存数据设置相同的过期时间时,这些数据很可能会在同一时间点同时失效,导致大量请求直接打到数据库上。

2.缓存集中失效:当服务器重启、网络故障等因素导致Redis服务不可用,且缓存数据没有自动进行容错处理,当服务恢复时大量的数据同时被重新加载到缓存中,也会导致大量请求直接打到数据库上。

预防缓存雪崩的方法主要有以下几种:

1.设置不同的过期时间:可以将缓存数据的过期时间分散开,避免大量缓存数据在同一时间点失效。

2.使用加锁:可以将所有请求都先进行加锁操作,当某个请求去查询数据库时,如果还没有加载到缓存中,则只让单个线程去执行加载操作,其他线程等待该线程完成后再次进行判断,避免瞬间都去访问数据库从而引起雪崩。

3.提前加载预热:在系统低峰期,可以提前将部分热点数据加载到缓存中,这样可以避免在高峰期缓存数据失效时全部打到数据库上。

4.使用多级缓存:可以在Redis缓存之上再使用一层缓存,例如本地缓存等,当Redis缓存失效时,还能够从本地缓存中获取数据,避免直接打到数据库上。

在这里插入图片描述

本地缓存:ehcache oscache spring自带缓存 持久层框架的缓存


总结

认识通讯协议——TCP/IP、UDP协议的区别,HTTP通讯协议的理解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/711253.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第九届数学与人工智能国际会议 (ICMAI 2024)即将召开!

2024年第九届数学与人工智能国际会议将于2024年5月10-12日在中国北京召开。本届会议由北京工业大学主办,旨在促进应用逻辑、算法与复杂性研究,使用数学的方法促进人工智能理论与应用发展,加深学术交流与合作。我们热忱欢迎从事相关技术研究的…

开源WIFI继电器之使用说明

1、设备说明 1.1外观 1.2供电 100~240V交流输入,Lin接火线,Nin接零线。 1.3连接负载 输出信号为继电器无源信号,用于信号的导通和断开控制,最大可通过10A负载电流,COM为继电器公共端,NO为继电器常开端&a…

蓝牙耳机推荐高性价比,五大超好用蓝牙耳机推荐,赶紧上车!

​随着技术的不断进步,蓝牙耳机的性能和配置也在不断提升,各大品牌都在推出具有各种特色的产品。其中,音质是很多消费者最为关注的一点。因此,我在这里为大家推荐几款音质表现还不错的几款蓝牙耳机,供大家参考。 一、挑…

SpringAOP

1. SpringAOP的基本概念 SpringAOP(Aspect-Oriented Programming)即面向切面编程,是Spring框架体系中非常重要的功能模块之一。AOP与OOP(面向对象编程)相辅相成,提供了一种与OOP不同的抽象软件结构的视图。…

Java毕业设计 基于SSM SpringBoot vue购物比价网站

Java毕业设计 基于SSM SpringBoot vue购物比价网站 SSM vue 购物比价网站 功能介绍 首页 图片轮播 商品 商品分类 商品详情 评论 收藏 商品攻略 商品信息 公告栏 在线反馈 登录 注册 个人中心 我的收藏 后台管理 登录 注册商品户 个人中心 修改密码 个人信息 商品户管理 用户…

IDC 中搭建 Serverless 应用平台:通过 ACK One 和 Knative 玩转云资源

作者:元毅、庄宇 如何打造云上(公共云)、云下(IDC 数据中心)统一的云原生 Serverless 应用平台,首先我们来看一下 ChatGPT 4 会给出什么样的答案: 如何打造云上、云下统一的云原生 Serverless…

【CesiumJS-3】加载倾斜模型数据(3DTilest)以及修改位置

引入倾斜模型数据 // 加载3DTiles数据let tileset;try {tileset await Cesium.Cesium3DTileset.fromUrl("/api/3DTiles/b3dm_qx/tileset.json");viewer.value.scene.primitives.add(tileset); // 倾斜模型添加到场景中viewer.value.zoomTo(tileset); // 视角定位到倾…

【音视频处理】使用ffmpeg实现多个视频合成一个视频(按宫格视图)

先上结果 环境 硬件:通用PC 系统:Windows 测试有效 软件:ffmpeg 解决 0、命令 ffmpeg.exe -i input1.mp4 -i input2.mp4 -i input3.mp4 -i input4.mp4 -filter_complex "[0:v]scaleiw/2:ih/2,pad2*iw:2*ih[a]; [1:v]scaleiw/2:ih/2…

GO学习记录

这里写目录标题 00 环境二级目录三级目录 00 环境 参考的&#xff1a;https://www.liwenzhou.com/posts/Go/install/ 编译运行&#xff1a; go mod init <项目名> // 在目录下创建项目 go mod init hello // 编译二级目录 三级目录

BioTech - 大分子药物设计 概述

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/136302202 大分子药物设计领域主要包括3个方面&#xff0c;即大环类药物设计、蛋白质与多肽类药物设计、核酸药物设计等&#xff0c;具体如下&…

selenium控制控件出现StaleElementReferenceException

attempts0while attempts<2:try:ywbh_text self.getElement(self.driver, //*[id"board_data"]/tbody/tr[1]/td[2])ywbh_text.click()config.zscjhbgbz_ywbh ywbh_text.textprint("保存业务编号&#xff1a;"ywbh_text.text"到conf中 zscjhbgbz_…

DolphinScheduler——奇富科技的调度实践

目录 一、技术架构 二、业务挑战 2.1 调度任务量大 2.2 运维复杂 2.3 SLA要求高 三、调度优化实践 3.1 重复调度 3.2 漏调度 3.3 Worker服务卡死 3.4 任务重复运行 四、服务监控 4.1 方法耗时监控 4.2 任务调度链路监控 五、用户收益 原文大佬的这篇调度系统案例…

nginx使用详解--缓存

Nginx 是一个功能强大的 Web 服务器和反向代理服务器&#xff0c;它可以用于实现静态内容的缓存&#xff0c;缓存可以分为客户端缓存和服务端缓存。 客户端缓存 客户端缓存指的是浏览器缓存, 浏览器缓存是最快的缓存, 因为它直接从本地获取(但有可能需要发送一个协商缓存的请…

【XR806开发板试用】全网首发,对接腾讯云平台的血泪史

1.前面的话 在上次连夜肝出了华为云平台的帖子:https://aijishu.com/a/1060000000287434 之后,论坛里的反响平平,好评没有,点赞更无,抱着已完成任务成功白嫖一块板子的心态,把板子收在了盒子里,第二天,助手小姐姐跟我说为何不把腾讯云的做了,对于这个要求我其实是拒绝的,但是小…

鸿蒙开发之组件间方法传递(方法回调)

目前使用的方式有两种&#xff0c;一种是父子组件方法传递&#xff0c;一种是系统提供的emitter。 一、父子组件方法传递 1.1 使用场景 当我们父组件中有一个方法&#xff0c;需要子组件在修改完数据后回调父组件的方法时候。有点抽象&#xff1a;这样解释一下&#xff0c;父…

深度学习-Pytorch运算的基本数据类型

深度学习-Pytorch模型运算的基本数据类型 用pytorch构建模型&#xff0c;并训练模型&#xff0c;得到一个优化的模型&#xff0c;那么模型构造的数据类型怎样的&#xff1f; 数据分析 数据分析-Pandas如何转换产生新列 数据分析-Pandas如何统计数据概况 数据分析-Pandas如…

Three.js-04轨道控制器

1.导入 说明&#xff1a;相机围绕目标进行轨道运动。也就是可以通过鼠标拖拽进行移动视角。 import { OrbitControls } from three/addons/controls/OrbitControls.js; 2.使用 说明&#xff1a;构造controls对象&#xff0c;再调用update方法&#xff1b;为了使效果更为明显…

十二、Qt自定义Widget组件、静态库与动态库

一、自定义Widget组件 1、自定义Widget组件 使用步骤采用提升法&#xff08;promotion&#xff09;重新定义paintEvent事件 2、实现程序 &#xff08;1&#xff09;创建项目&#xff0c;基于QWidget &#xff08;2&#xff09;添加类&#xff0c;为Widget组件提升类 #inclu…

Spring Boot 集成 Quartz 实现定时任务

Spring Boot 集成 Quartz 实现定时任务 在Spring Boot应用中&#xff0c;我们经常需要执行一些定时任务&#xff0c;如每天发送报表、定时更新数据库等。虽然Spring Framework自带了一个简单的定时任务功能&#xff08;Scheduled&#xff09;&#xff0c;但在一些复杂场景下&a…

Vue3 在SCSS中使用v-bind

template 先创建一个通用的页面结构 <template><div class"v-bubble-bg"></div> </template>js 在JS中先对需要用的数据进行定义&#xff1a; 可以是参数&#xff0c;也可以是data <script setup>const props defineProps({bgCol…