当前位置: 首页 > news >正文

认识通讯协议——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通讯协议的理解

相关文章:

  • 【洛谷 P8682】[蓝桥杯 2019 省 B] 等差数列 题解(数学+排序+辗转相除法)
  • 750541-89-0,mPEG4 phosphonic acid,可以作为催化剂、络合剂
  • spring、springmvc、springboot框架的介绍
  • NOIP 2009普及组初赛试题及解析
  • RunnerGo UI自动化测试脚本如何配置
  • 了解游戏中的数据同步
  • java框架八股
  • Node.js中的并发和多线程处理
  • Java毕业设计 基于SpringBoot vue 社团管理系统
  • 【wpf】关于绑定的一点明悟
  • http 协议深入介绍
  • 在vue前端开发中基于refreshToken和axios拦截器实现token的无感刷新
  • sql 分割字段,并分行
  • python数据分析numpy基础之cumsum求数组累计和
  • C++入门和基础
  • JS 中的深拷贝与浅拷贝
  • SegmentFault for Android 3.0 发布
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • const let
  • css系列之关于字体的事
  • Facebook AccountKit 接入的坑点
  • JavaScript 基本功--面试宝典
  • js
  • learning koa2.x
  • leetcode388. Longest Absolute File Path
  • magento 货币换算
  • Map集合、散列表、红黑树介绍
  • MySQL QA
  • Quartz初级教程
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • SpiderData 2019年2月25日 DApp数据排行榜
  • uni-app项目数字滚动
  • Vue.js-Day01
  • Vue2.x学习三:事件处理生命周期钩子
  • 前端面试题总结
  • 什么是Javascript函数节流?
  • 使用 QuickBI 搭建酷炫可视化分析
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 写代码的正确姿势
  • kubernetes资源对象--ingress
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • # 安徽锐锋科技IDMS系统简介
  • #Linux(权限管理)
  • #LLM入门|Prompt#3.3_存储_Memory
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (编译到47%失败)to be deleted
  • (附源码)node.js知识分享网站 毕业设计 202038