Python 连接数据源与邮件功能(九)

news2024/12/26 12:04:09

文章目录

    • 一、概述
    • 二、Python 连接数据源
      • 1)Python MySQL 基础操作
        • 1、部署MySQL
        • 2、MySQL Connector 库
          • 【1】安装 mysql-connector-python 库
          • 【2】连接 MySQL
          • 【3】增加数据
          • 【4】查询数据
          • 【5】更新数据
          • 【6】删除数据
        • 2、PyMySQL 库
          • 【1】安装 PyMySQL 库
          • 【2】连接 MySQL
          • 【3】增加数据
          • 【4】查询数据
          • 【5】更新数据
          • 【6】更新数据
      • 2)Python Redis 基础操作
        • 1、部署 Redis
        • 2、Python Redis 基本操作
          • 【1】安装 Redis 客户端库
          • 【2】连接 Redis
          • 【3】设置键值对
          • 【4】获取键值对
          • 【5】删除键
          • 【6】判断键是否存在
          • 【7】设置过期时间
          • 【8】自增和自减
    • 三、邮件功能
      • 1)开通邮箱服务功能
        • 1、邮件协议介绍
        • 2、QQ邮箱开启邮件服务设置
        • 3、163邮箱开启邮件服务设置
      • 2)Python 邮件示例讲解

一、概述

连接数据源和邮件发送和邮件接收也是在项目中很常见的功能,数据量小的话,可以存在MySQL、Redis、PostgreSQL 等等,数据量大的话,就可以考虑大型分布式高可用存储数据库系统例如:Hadoop、StarRocks、ClickHouse等等。邮件发送一般用于通知,像告警通知,下单通知,支付通知等等。

在这里插入图片描述

二、Python 连接数据源

1)Python MySQL 基础操作

Python是一种流行的编程语言,而MySQL是一种常用的关系型数据库管理系统。Python中有许多不同的MySQL库可供使用,其中一些最常用的库包括:

  • MySQL Connector——这是MySQL官方提供的Python库,可以在Python 2.7和Python 3.x中使用。它提供了与MySQL数据库的连接和交互的API,并支持多种操作系统。
  • PyMySQL ——这是一个纯Python实现的MySQL客户端库,可以在Python 2.7和Python 3.x中使用。它提供了一种简单而直接的方法来连接到MySQL服务器,并执行查询和其他操作。

1、部署MySQL

MySQL的介绍和部署可以参考我以下几篇文章:

  • 面试宝典之——Mysql
  • MySQL高可用实战( MHA)
  • 【云原生】MySQL on k8s 环境部署

2、MySQL Connector 库

Python 通过 MySQL Connector 模块提供了访问 MySQL 数据库的能力,可以通过该模块使用一系列的函数来进行数据库操作。

下面是一些常用的 Python MySQL 函数:

  • connect():用于连接 MySQL 数据库,返回一个连接对象。

  • cursor():用于创建一个游标对象,该对象用于执行查询语句和读取数据。

  • execute():用于执行 SQL 语句,返回受影响的行数。

  • fetchone():用于获取结果集中的下一行数据。

  • fetchall():用于获取结果集中的所有数据。

  • commit():用于提交事务。

  • rollback():用于回滚事务。

  • close():用于关闭连接。

以下是使用MySQL Connector进行连接和增删改查的演示示例。

【1】安装 mysql-connector-python 库

首先,需要安装mysql-connector-python库:

pip install mysql-connector-python
【2】连接 MySQL

要进行数据库操作,需要先连接MySQL数据库。连接MySQL数据库的代码如下:

import mysql.connector

# 连接到MySQL服务器
conn = mysql.connector.connect(
user='username', 
password='password', 
host='hostname', 
database='database_name'
)

mycursor = conn.cursor()

# 关闭连接
mycursor.close()
conn.close()

在连接数据库时需要替换hostuserpassworddatabase为相应的值。

【3】增加数据

可以使用 execute() 函数执行 INSERT INTO 语句,将数据插入到数据库中。以下是一个示例:

import mysql.connector

# 连接到MySQL服务器
conn = mysql.connector.connect(
user='username', 
password='password', 
host='hostname', 
database='database_name'
)

mycursor = conn.cursor()

sql = "INSERT INTO customers (name, address) VALUES (%s, %s)"
val = ("John", "Highway 21")
mycursor.execute(sql, val)

conn.commit()

print(mycursor.rowcount, "record inserted.")

# 关闭连接
mycursor.close()
conn.close()

在这个例子中,将一条记录插入到名为"customers"的表中。通过将数据作为元组传递给execute()方法,将值插入到占位符中。最后,需要使用commit()方法提交更改。

【4】查询数据

可以使用 execute() 函数执行 SELECT 语句,查询数据库中的数据。以下是一个示例:

import mysql.connector

# 连接到MySQL服务器
conn = mysql.connector.connect(
user='username', 
password='password', 
host='hostname', 
database='database_name'
)

mycursor = conn.cursor()

mycursor.execute("SELECT * FROM customers")

myresult = mycursor.fetchall()

for x in myresult:
  print(x)

# 关闭连接
mycursor.close()
conn.close()

在这个例子中,从名为"customers"的表中选择所有记录,并使用fetchall()方法将结果存储在变量myresult中。最后,使用循环打印每个记录。

【5】更新数据

可以使用 execute() 函数执行 UPDATE 语句,更新数据库中的数据。以下是一个示例:

import mysql.connector

# 连接到MySQL服务器
mydb = mysql.connector.connect(
user='username', 
password='password', 
host='hostname', 
database='database_name'
)

mycursor = mydb.cursor()

sql = "UPDATE customers SET address = 'Canyon 123' WHERE address = 'Highway 21'"

mycursor.execute(sql)

mydb.commit()

print(mycursor.rowcount, "record(s) affected")

# 关闭连接
cursor.close()
conn.close()

在这个例子中,将名为"customers"的表中地址为"Highway 21"的记录的地址更新为"Canyon 123"。

【6】删除数据

可以使用 execute() 函数执行 DELETE 语句,删除数据库中的数据。以下是一个示例:

import mysql.connector

# 连接到MySQL服务器
mydb = mysql.connector.connect(
user='username', 
password='password', 
host='hostname', 
database='database_name'
)

mycursor = mydb.cursor()

sql = "DELETE FROM customers WHERE address = 'Canyon 123'"

mycursor.execute(sql)

mydb.commit()

print(mycursor.rowcount, "record(s) deleted")

# 关闭连接
cursor.close()
conn.close()

2、PyMySQL 库

Python PyMySQL 是一个纯 Python 实现的 MySQL 客户端库,使用 PyMySQL 可以连接 MySQL 数据库并执行数据库操作。下面介绍一些 PyMySQL 常用的函数:

  • connect():用于连接 MySQL 数据库,返回一个连接对象。

  • cursor():用于创建一个游标对象,该对象用于执行查询语句和读取数据。

  • execute():用于执行 SQL 语句,返回受影响的行数。

  • executemany():用于执行多个 SQL 语句,返回受影响的行数。

  • fetchone():用于获取结果集中的下一行数据。

  • fetchall():用于获取结果集中的所有数据。

  • fetchmany():用于获取结果集中指定数量的数据。

  • commit():用于提交事务。

  • rollback():用于回滚事务。

  • close():用于关闭连接。

【1】安装 PyMySQL 库

首先,需要安装PyMySQL库:

pip install PyMySQL
【2】连接 MySQL

要进行数据库操作,需要先连接MySQL数据库。连接MySQL数据库的代码如下:

接下来,连接到MySQL服务器并执行查询:

import pymysql

# 连接到MySQL服务器
conn = pymysql.connect(
    host='hostname',
    port=port,
    user='username',
    password='password',
    db='database_name',
    charset='utf8'
)

# 创建游标对象
mycursor = conn.cursor()

在上面的代码中,需要将hostnameportusernamepassworddatabase_name替换为实际的数据库连接信息。

【3】增加数据

可以使用 execute() 函数执行 INSERT INTO 语句,将数据插入到数据库中。以下是一个示例:

import pymysql

# 连接数据库
conn = pymysql.connect(
  host="localhost",
  user="username",
  password="password",
  database="mydatabase"
)

# 创建游标对象
mycursor = conn.cursor()

# 执行插入语句
sql = "INSERT INTO customers (name, address) VALUES (%s, %s)"
val = ("John", "Highway 21")
mycursor.execute(sql, val)

# 提交事务
conn.commit()

# 打印插入数据的 ID
print(mycursor.lastrowid)

# 关闭连接
cursor.close()
conn.close()
【4】查询数据

可以使用 execute() 函数执行 SELECT 语句,查询数据库中的数据。以下是一个示例:

import pymysql

# 连接数据库
conn = pymysql.connect(
  host="localhost",
  user="username",
  password="password",
  database="mydatabase"
)

# 创建游标对象
mycursor = conn.cursor()

# 执行查询语句
sql = "SELECT * FROM customers"
mycursor.execute(sql)

# 获取结果集中的所有数据
myresult = mycursor.fetchall()

# 打印数据
for x in myresult:
  print(x)

# 关闭连接
cursor.close()
conn.close()
【5】更新数据

可以使用 execute() 函数执行 UPDATE 语句,更新数据库中的数据。以下是一个示例:

import pymysql

# 连接数据库
conn = pymysql.connect(
  host="localhost",
  user="username",
  password="password",
  database="mydatabase"
)

# 创建游标对象
mycursor = conn.cursor()

# 执行更新语句
sql = "UPDATE customers SET address = 'Canyon 123' WHERE address = 'Highway 21'"
mycursor.execute(sql)

# 提交事务
conn.commit()

# 打印受影响的行数
print(mycursor.rowcount)

# 关闭连接
cursor.close()
conn.close()
【6】更新数据

可以使用 execute() 函数执行 DELETE 语句,删除数据库中的数据。以下是一个示例:

import pymysql

# 连接数据库
conn = pymysql.connect(
  host="localhost",
  user="username",
  password="password",
  database="mydatabase"
)

# 创建游标对象
mycursor = conn.cursor()

# 执行删除语句
sql = "DELETE FROM customers WHERE address = 'Canyon 123'"
mycursor.execute(sql)

# 提交事务
conn.commit()

# 打印受影响的行数
print(mycursor.rowcount)

# 关闭连接
cursor.close()
conn.close()

上述代码演示了如何连接到 MySQL 数据库、执行插入、更新、删除和查询操作以及关闭连接。在实际应用中,还可以使用其他函数来执行复杂的操作,如连接池、事务管理等。

2)Python Redis 基础操作

Redis 是一种基于内存的数据结构存储系统,它可以用作数据库、缓存和消息代理。Python 是一种流行的编程语言,提供了一个 Redis 客户端库,可以轻松地与 Redis 交互。下面是一些 Python Redis 基本操作的示例。

1、部署 Redis

Redis 的介绍和部署可以参考我以下几篇文章:

  • 面试宝典之——Redis
  • Redis原理介绍与环境部署(主从模式、哨兵模式、集群模式)
  • 【云原生】Redis on k8s 编排部署讲解与实战操作

2、Python Redis 基本操作

【1】安装 Redis 客户端库

要在 Python 中使用 Redis,需要安装 Redis 客户端库。可以使用 pip 工具安装:

pip install redis
【2】连接 Redis

在 Python 中连接 Redis,需要使用 Redis 客户端库中的 Redis 类。可以使用以下代码连接到 Redis:

import redis

redis_client = redis.Redis(host='localhost', port=6379, db=0)
【3】设置键值对

可以使用 set 方法设置键值对:

redis_client.set('key', 'value')

也可以使用 mset 方法一次设置多个键值对:

redis_client.mset({'key1': 'value1', 'key2': 'value2'})
【4】获取键值对

可以使用 get 方法获取单个键的值:

value = redis_client.get('key')
print(value)

也可以使用 mget 方法一次获取多个键的值:

values = redis_client.mget(['key1', 'key2'])
print(values)
【5】删除键

可以使用 delete 方法删除一个键:

redis_client.delete('key')

也可以使用 delete 方法删除多个键:

redis_client.delete('key1', 'key2')
【6】判断键是否存在

可以使用 exists 方法判断一个键是否存在:

exists = redis_client.exists('key')
print(exists)
【7】设置过期时间

可以使用 expire 方法设置一个键的过期时间(以秒为单位):

redis_client.expire('key', 60)

也可以使用 expireat 方法设置一个键的过期时间(以 Unix 时间戳为单位):

import time

expire_time = int(time.time()) + 60
redis_client.expireat('key', expire_time)
【8】自增和自减

可以使用 incr 方法对一个键进行自增操作:

redis_client.set('count', 0)
redis_client.incr('count')

也可以使用 decr 方法对一个键进行自减操作:

redis_client.set('count', 10)
redis_client.decr('count')

以上是一些 Python Redis 的基本操作示例,可以根据具体需要进行适当修改和调整。

三、邮件功能

Python 中可以使用标准库中的 smtplibemail 模块来发送和接收电子邮件。

1)开通邮箱服务功能

1、邮件协议介绍

SMTP、POP3和IMAP都是电子邮件协议,用于在计算机之间传递和接收电子邮件。

  • SMTP(Simple Mail Transfer Protocol)是用于发送电子邮件的协议。它定义了电子邮件如何通过互联网发送,包括如何连接到邮件服务器、如何验证身份、如何传输邮件、如何处理错误等。

  • POP3(Post Office Protocol version 3)是用于接收电子邮件的协议。它定义了电子邮件如何从邮件服务器下载到本地计算机上的电子邮件客户端。POP3协议允许用户下载所有的邮件,但是在本地计算机上只保留一份副本。

  • IMAP(Internet Message Access Protocol)也是用于接收电子邮件的协议。它定义了电子邮件如何从邮件服务器下载到本地计算机上的电子邮件客户端。IMAP协议允许用户对邮件进行管理和组织,例如在本地计算机上创建文件夹来存储邮件,而不是在邮件服务器上。这使得IMAP更适合那些需要在多个设备上使用电子邮件的用户。

总之,SMTP、POP3和IMAP是三种不同的协议,每个协议都有其独特的作用,使得电子邮件的发送和接收变得更加便捷和高效。简单地说,SMTP管,POP3/IMAP管

POP(Post Office Protocol)和 IMAP(Internet Message Access Protocol)都是电子邮件客户端和邮件服务器之间的协议,但是它们在处理电子邮件的方式上有一些重要的区别:

  • 工作方式:POP将邮件从邮件服务器下载到本地计算机上的邮件客户端,然后将邮件从邮件服务器中删除,这意味着用户只能在本地计算机上访问邮件的一份副本;而IMAP将邮件保留在邮件服务器上,只有在用户请求访问邮件时才会下载邮件到本地计算机上的邮件客户端。

  • 多设备支持:由于POP只下载邮件的一份副本到本地计算机上,因此如果用户使用多个设备(如电脑、平板电脑、智能手机等)来访问邮件,则每个设备上的邮件客户端都会显示不同的邮件状态。而IMAP协议允许用户在多个设备上访问邮件,因为邮件始终保留在邮件服务器上。

  • 邮件管理:IMAP允许用户在邮件服务器上对邮件进行管理,例如创建、删除和重命名文件夹,标记邮件已读或未读等。这使得用户可以轻松地在多个设备之间同步邮件状态。而POP协议只是简单地下载邮件并删除它们,不能像IMAP那样管理邮件。

  • 带宽:由于IMAP只在用户需要访问邮件时才下载邮件,因此它可以节省带宽。而POP在每次下载邮件时都会占用带宽,因为它要下载所有邮件的一份副本。

总之,IMAP是更先进的邮件协议,可以提供更多的功能和灵活性,特别是对于那些需要在多个设备上访问邮件的用户。而POP适合那些只使用单个设备访问邮件的用户。

2、QQ邮箱开启邮件服务设置

在这里插入图片描述
在这里插入图片描述

3、163邮箱开启邮件服务设置

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

最后整理一下邮箱服务器:
在这里插入图片描述

2)Python 邮件示例讲解

以下是一个简单的 Python 脚本,演示了如何使用这两个模块来发送电子邮件。

发送邮件实例:

import smtplib
from email.mime.text import MIMEText
from email.header import Header

# 设置邮件参数
smtp_server = 'smtp.example.com'  # 邮件服务器
from_addr = 'your_email@example.com'  # 发件人邮箱
to_addr = 'recipient_email@example.com'  # 收件人邮箱
username = 'your_email@example.com'  # 发件人邮箱账号
password = 'your_email_password'  # 发件人邮箱密码

# 构建邮件内容
msg = MIMEText('Hello, this is a test email sent by Python.', 'plain', 'utf-8')
msg['From'] = Header('Sender Name', 'utf-8')
msg['To'] = Header('Recipient Name', 'utf-8')
msg['Subject'] = Header('Python Test Email', 'utf-8')

# 发送邮件
try:
    server = smtplib.SMTP(smtp_server, 25)
    server.login(username, password)
    server.sendmail(from_addr, to_addr, msg.as_string())
    server.quit()
    print("Email sent successfully!")
except smtplib.SMTPException:
    print("Error: 无法发送邮件")

接收邮件示例:

import poplib

# 设置邮件参数
pop_server = 'pop.example.com'  # 邮件服务器
username = 'your_email@example.com'  # 邮箱账号
password = 'your_email_password'  # 邮箱密码

# 连接到邮件服务器
server = poplib.POP3(pop_server)
server.user(username)
server.pass_(password)

# 获取邮件列表
resp, mails, octets = server.list()
print("Total emails: {}".format(len(mails)))

# 获取最新一封邮件
resp, lines, octets = server.retr(len(mails))
msg_content = b'\n'.join(lines).decode('utf-8')

# 解析邮件内容
from email.parser import Parser
msg = Parser().parsestr(msg_content)
print("Subject: {}".format(msg['Subject']))
print("From: {}".format(msg['From']))
print("To: {}".format(msg['To']))
print("Content:\n{}".format(msg.get_payload()))

这里的示例代码仅仅是一个简单的示例,可以根据具体的需要来修改和扩展。在使用示例时,注意修改上面的连接信息哦。


Python 连接数据源与邮件功能的讲解就先到这里了,有任何疑问欢迎给我留言哦,欢迎点赞、转发并收藏哦,也可关注我的公众号【大数据与云原生技术分享】进行深入交流技术~

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

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

相关文章

2023年数学建模美赛D题(Prioritizing the UN Sustainability Goals):SDGs 优先事项的选择

正在写,不断更新,别着急。。。 4. SDGs 优先事项的选择 4.1 基于SDG密度分布图选择优先事项 虽然每个可持续发展目标的接近度矩阵和中心性度量的结果是通用的,并创建了基本的可持续发展目标网络,但由于各国在网络的不同部分取得…

前端网格布局grid

网格布局 <style> .container {border:none;display: grid;height: 600px;grid-template-columns: 200px 1fr; /*两列&#xff0c;第一列200px&#xff0c;第二列自适应*/grid-template-rows: 50px 1fr 30px; /*三行&#xff1a;第一行&#xff1a;50px,第二行&#…

【C语言每日一题】——猜名次

【C语言每日一题】——猜名次&#x1f60e;前言&#x1f64c;猜名次&#x1f64c;解题思路分享&#xff1a;&#x1f60d;解题源码分享&#xff1a;&#x1f60d;总结撒花&#x1f49e;&#x1f60e;博客昵称&#xff1a;博客小梦 &#x1f60a;最喜欢的座右铭&#xff1a;全神…

大数据之-Nifi-应用场景2-2_设置putfile处理器自动创建目标文件夹_以及存在重复文件时自动覆盖---大数据之Nifi工作笔记0006

上一节我们留了两个问题,一个是,如果我们没有创建putfile要写入的目标文件夹,会报错吗? 可以看到我们putfile目标文件夹是上面这个目录 我们来试一试,如果目标文件夹不存在,putfile处理器会自动创建吗 首先我们删除这个target目标文件夹 然后我们进入cd source目录,源文件夹目…

echart在微信小程序的使用

echart在微信小程序的使用 echarts不显示在微信小程序 <!-- 微信小程序的echart的使用 --> <view class"container"><ec-canvas id"mychart-dom-bar" canvas-id"mychart-bar" ec"{{ ec }}"></ec-canvas> &l…

SVNH数据(.mat格式)转为图像(.png)matlab代码

一、获取SVNH数据数据集集地址-http://ufldl.stanford.edu/housenumbers/提供两种格式的数据&#xff1a;1.Format 1&#xff0c;图像形式&#xff0c;压缩包2.Format 2&#xff0c; .mat格式的数据10 classes, 1 for each digit. Digit 1 has label 1, 9 has label 9 and 0 ha…

Git在日常使用过程中的常用命令

文章目录Git在日常使用过程中的常用命令写在前面1. 创建本地仓库2. 将本地文件添加到暂存区3. 将本地文件从暂存区撤销4. 将修改提交到本地仓库5. clone远程版本库到本地。6. 为本地版本库添加一个远程仓库7. 推送到远程仓库8. 将远程分支内容拉取到本地Git在日常使用过程中的常…

Docker下快速搭建RabbitMQ单例及集群

引子生命在于折腾&#xff0c;为上数据实时化用到了消息传送的内容&#xff0c;当时也和总公司人员商量选型&#xff0c;kafka不能区分分公司就暂定用了RbtMQ刚好个人也在研究容器及分布式部署相关内容就在docker上实践单机 docker&#xff08;要想快 先看问题 避免踩坑&#x…

Linux 简介

Linux 内核最初只是由芬兰人林纳斯托瓦兹&#xff08;Linus Torvalds&#xff09;在赫尔辛基大学上学时出于个人爱好而编写的。 Linux 是一套免费使用和自由传播的类 Unix 操作系统&#xff0c;是一个基于 POSIX 和 UNIX 的多用户、多任务、支持多线程和多 CPU 的操作系统。 …

[安装]ThinkPad X250加装固态硬盘教程

方案&#xff1a;保留原有的机械硬盘&#xff0c;再加装一个固态硬盘作为系统盘。由于X250没有光驱&#xff0c;这样就无法使用第二个2.5寸的硬盘。还好&#xff0c;X250留有一个M.2接口&#xff0c;这样&#xff0c;就可以使用NGFF M.2接口的固态硬盘。不过&#xff0c;这种接…

如何在 Python 中验证用户输入

要验证用户输入&#xff1a; 使用 while 循环进行迭代&#xff0c;直到提供的输入值有效。检查输入值在每次迭代中是否有效。如果该值有效&#xff0c;则跳出 while 循环。 # ✅ 验证用户输入的是否是整数num 0while True:try:num int(input("Enter an integer 1-10: …

python练习

项目场景一&#xff1a; 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 问题描述 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶…

一文讲明TCP网络编程、Socket套接字的讲解使用、网络编程案例

文章目录1 Socket讲解2 基于Socket的TCP编程3 客户端Socket的工作过程包含以下四个基本的步骤3.1 客户端创建Socket对象4 服务器程序的工作过程包含以下四个基本的步骤&#xff1a;4.1 服务器建立ServerSocket对象5 案例实现 客户端和服务端通信5.1 代码实现5.2 实现结果6 更多…

cgroup基础介绍

一项新概念的产生&#xff0c;必然有其原因&#xff0c;cgroup也不例外&#xff0c;最初由谷歌工程师Paul Menage和Rohit Seth提出【1】&#xff1a;因为计算机硬件能力越来越强大&#xff0c;为了提高机器的使用效率&#xff0c;可以在同一台机器上运行不同运算模型的工作。开…

安卓---第5章 数据存储---保存QQ账号与密码

文章目录案例1: 使用文件存储 保存QQ账号与密码功能描述saveqq_1.xmlFileSaveQQ.javasaveqq_1案例2 使用SP保存QQ账号与密码功能描述SPSaveQQ.java其他代码1. 数据存储方式2. 文件存储将数据存入文件中内部存储&#xff1a;外部存储&#xff1a;从文件中读取数据读取内部存储读…

信息系统服务管理

一、信息系统服务业及发展二、信息系统工程监理的概念及发展三、信息系统运行维护的概念和发展 IT服务管理&#xff08;ITSM) 四、信息技术服务管理的标准和框架 IT服务标准体系&#xff08;ITSS&#xff09; 一、信息系统服务业及发展 总结&#xff1a;前景很好 二、信息系…

计网传输层协议:UDP和TCP

文章目录一. 应用层和传输层的联系二. UDP协议三. TCP协议1. TCP报头介绍2. TCP实现可靠传输的核心机制2.1 确认应答2.2 超时重传3. 连接管理(三次握手, 四次挥手)3.1 建立连接(三次握手)3.2 断开连接(四次挥手)4. 滑动窗口5. 流量控制6.拥塞控制7. 延时应答8. 捎带应答9. 面向…

5.InfluxDB定时任务与报警

定时任务 InfluxDB的定时任务本质上是定时执行一个Flux脚本,一般回先查询数据再聚合修改最后可以写回另外一个bucket中 常用的定时任务使用场景 降采样 : 如果数据的输入频率特别快比如IOT温度计设备每秒往InfluxDB写入一条数据会有大量的数据写入一个InfluxDB的bucket (因为…

kubernetes教程 --Pod详解

Pod详解 每个Pod中都可以包含一个或者多个容器&#xff0c;这些容器可以分为两类&#xff1a; 用户程序所在的容器&#xff0c;数量可多可少 Pause容器&#xff0c;这是每个Pod都会有的一个根容器&#xff0c;它的作用有两个&#xff1a; 可以以它为依据&#xff0c;评估整个…

ADS仿真,3db均衡器是否可以补偿3db插入损耗?

背景高速信号走线经常会有走线超长的问题&#xff0c;走线过长带来的直接影响是对应的插入损耗IL会增加&#xff0c;当超过标准要求时需增加Redriver等补偿&#xff0c;最常用的调整时增加预加重和去加重。而调整预加重时首先遇到的一个问题是补偿多少db?是否3db的均衡就可以补…