【Redis】Redis 持久化 -- RDB AOF

news2024/9/19 11:45:39

文章目录

  • 1 持久化介绍
  • 2 RDB
    • 2.1 RDB 介绍
    • 2.2 触发方式
    • 2.3 流程介绍
    • 2.4 RDB 文件
    • 2.5 RDB 优缺点
  • 3 AOF
    • 3.1 AOF 介绍
    • 3.2 缓冲区刷新策略
    • 3.3 AOF 重写机制
      • 3.3.1 重写机制介绍
      • 3.3.2 混合持久化
      • 3.3.3 重写触发方式
      • 3.3.4 AOF 重写流程
    • 3.4 AOF 优缺点
  • 4 启动时数据恢复

1 持久化介绍

我们知道,Redis 是基于 key-value 的 NoSQL 数据库,它的最大特点是速度非常快,几乎是 MySQL 的十万倍;而支撑 Redis 速度快特性的最主要原因是 Redis 中的数据都存储在内存中。

这里就引出了一个问题 – 内存中的数据是掉电易失的,且一旦进程退出内存中的对应数据也会被释放,那么我们要如何保证 Redis 数据库中的数据安全?

答案很简单,将内存中的数据持久化一份到硬盘中就好了,这样当我们读取数据时直接从内存中读取,当我们写入数据时同时写入内存与硬盘。但将数据写入到硬盘的速度是远慢于写入内存的,这会导致 Redis 的速度变慢,为了就可能降低数据写入硬盘对 Redis 性能带来的影响,Redis 提出不同的持久化策略 – RDB 与 AOF。

2 RDB

2.1 RDB 介绍

RDB 全称是 Redis Database,它的思想是定期将内存中的数据生成快照保存到硬盘中,即每隔一段时间将内存中的 key-value 键值对写入到特定的磁盘文件中,当 Redis 服务重启时,使用该文件中的数据来恢复内存中的数据。

2.2 触发方式

RDB 定期将内存数据快照保存到硬盘中,这里的定期具体表现为两种方式 – 自动触发和手动触发。

手动触发是指程序员通过 Redis 客户端执行特定的命令来触发快照生成,包括:

  • save:阻塞当前 Redis 服务器,直到 RDB 过程完成为止,此命令对于内存比较大的实例可能造成长时间阻塞,因此基本不采用。
  • bgsave (background save):Redis 服务器通过 fork 创建子进程 的方式来完成 RDB,久化过程由子进程负责,完成后自动结束,一般不会阻塞服务器。

自动触发是指在配置文件 redis.conf 中进行相关项的配置,让 Redis 服务器达到某种条件时 (间隔多长时间以及发生了多少次修改) 自动触发 bgsave 命令,用户无感知。具体如下:

################################ SNAPSHOTTING  ################################
#
# Save the DB on disk:
#
#   save <seconds> <changes>
#
#   Will save the DB if both the given number of seconds and the given
#   number of write operations against the DB occurred.
#
#   In the example below the behaviour will be to save:
#   after 900 sec (15 min) if at least 1 key changed
#   after 300 sec (5 min) if at least 10 keys changed
#   after 60 sec if at least 10000 keys changed
#
#   Note: you can disable saving completely by commenting out all "save" lines.                
#
#   It is also possible to remove all the previously configured save
#   points by adding a save directive with a single empty string argument
#   like in the following example:
#
#   save ""

save 900 1
save 300 10
save 60 10000

注意配置项的描述 – 只有当经过的秒数以及最少修改次数都达标时,Redis 才会自动触发 bgsave。

2.3 流程介绍

下面我们来介绍一下 bgsave 命令的运行流程:

img

如上图所示:

  1. 执行 bgsave 命令,Redis 父进程判断当前进程是否存在其他正在执行的子进程,如 RDB/AOF 子进程,如果存在则直接返回。

  2. 父进程执行 fork 创建子进程,此过程会发送阻塞,fork 得到的子进程会继承父进程的 task_struct 以及 mm_struct 等内存数据结构,使得子进程能够访问所有父进程的内存数据。

  3. 父进程 fork 完成后,bgsave 命令返回 "Background saving started" 信息并不再阻塞父进程,可以继续响应其他命令。

  4. 子进程创建 RDB 文件,根据父进程内存生成临时快照文件,完成写入后对磁盘中已有的 RDB 文件进行原子替换 (文件的重命名操作是原子的)。

  5. 子进程发送信号给父进程表示 RDB 完成,父进程更新统计信息。

2.4 RDB 文件

关于 RDB 文件,有一些需要注意的地方:

  • RDB 文件默认保存路径为 /var/lib/redis/,可以通过配置文件中的 dir 选项进行配置; 默认文件名为 dump.rdb,可以通过配置文件中的 dbfilename 选型进行配置。
  • RDB 是二进制格式的文件,并且 Redis 会将内存中的数据以压缩的形式保存到此二进制文件中;这虽然消耗了一定的 CPU 资源,但能大幅度降低文件体积;同时二进制格式数据加载到内存后可以直接使用,因此 Redis 重启加载时, RDB 的速度要远快于 AOF。
  • RDB 文件中的数据可能由于人为修改或网络传输等原因导致格式被破坏,这会造成 Redis 无法重新启动,此时我们可以使用 Redis 提供的 redis-check-dump 工具,检测 RDB 文件并获取对应的错误报告。
  • Redis 服务器在正常退出时,比如执行 shutdown 命令,会自动执行 bgsave 生成 RDB 文件,便于下次重启时恢复内存数据;但如果 Redis 服务器异常退出,比如 kill -9 或者 掉电等,就会来不及生成 RDB 文件,导致部分内存数据丢失。

2.5 RDB 优缺点

优点:

  • RDB 是一个紧凑压缩的二进制文件,代表 Redis 在某个时间点上的数据快照,非常适用于备份,全量复制等场景。比如每 6 小时执行 bgsave 备份,并把 RDB 文件复制到远程机器或者文件系统中(如 hdfs)用于灾备。
  • 由于 RDB 的二进制格式,Redis 加载 RDB 恢复数据的速度要远远快于 AOF 的方式 (AOF 采用文本格式存储)。

缺点:

  • RDB 方式数据没办法做到实时持久化 / 秒级持久化。因为 bgsave 每次运行都要执行 fork 创建子进程,然后由子进程进行持久化,这一过程中可能有新数据到来。
  • RDB 每次持久化都要全量复制内存中的数据,属于重量级操作,成本较高。
  • RDB 文件使用特定二进制格式保存,Redis 版本演进过程中有多个 RDB 版本,兼容性可能有风险。

3 AOF

3.1 AOF 介绍

我们上面学习了 RDB 持久化方式,RDB 最大的缺点在于无法做到实时持久化,两次生成快照之间的实时数据可能随着服务器异常退出而丢失。为了解决这个问题,Redis 提出了 AOF (Append Only File) 持久化。

AOF 以独立日志的方式来记录每次写命令,即将用户的每个修改操作都记录到文件中;Redis 重启时再从文件中读取这些命令然后重新执行,达到恢复数据的效果。AOF 解决了数据持久化的实时性,目前已经成为 Redis 持久化的主流方式。

AOF 的使用方式如下:

  • Redis 默认使用 RDB 方式进行持久化,要启用 AOF,需要修改配置文件中的 appendonly 选项为 yes
  • AOF 默认文件名为 appendonly.aof,可以通过 appendfilename 选项进行配置。
  • AOF 文件默认存储路径为 /var/lib/redis,与 RDB 一样,可以通过 dir 选项进行配置。
############################## APPEND ONLY MODE ###############################

# By default Redis asynchronously dumps the dataset on disk. This mode is
# good enough in many applications, but an issue with the Redis process or
# a power outage may result into a few minutes of writes lost (depending on
# the configured save points).                                                                                                 
#
# The Append Only File is an alternative persistence mode that provides
# much better durability. For instance using the default data fsync policy
# (see later in the config file) Redis can lose just one second of writes in a
# dramatic event like a server power outage, or a single write if something
# wrong with the Redis process itself happens, but the operating system is
# still running correctly.
#
# AOF and RDB persistence can be enabled at the same time without problems.
# If the AOF is enabled on startup Redis will load the AOF, that is the file
# with the better durability guarantees.
#
# Please check http://redis.io/topics/persistence for more information.

appendonly yes

# The name of the append only file (default: "appendonly.aof")

appendfilename "appendonly.aof"

需要注意的是,当开启 AOF 后,RDB 就失效了,即服务器退出时不再自动生成 RDB 文件,服务器重启时也不使用 RDB,而是 使用 AOF 文件进行数据恢复。

既然 AOF 能做到实时持久化,那是不是意味着内存中的数据一定不会丢失?

不是,AOF 下也可能存在数据丢失:

  • Redis 是一个单线程程序,且最主要的特性是速度快,为了维持这个特性,Redis 必定不可能将所有修改真正的实时写入到硬盘中。
  • 实际上,AOF 机制并非是直接让一个工作线程把数据写入硬盘,而是先写到一个内存中的缓冲区,积累一波之后,再统一写入硬盘。这样能够大大降低硬盘的读写次数,从而减少对 Redis 效率的影响。
  • 那么这里就产生一个问题 – 将修改操作暂时写入到内存缓冲区中,本质上数据还是在内存中,此时如果 Redis 进程异常退出,缓冲区中的数据还是会丢失。

AOF 的工作流程如下:

  1. 所有的写入命令会追加到 aof_buf(缓冲区)中。
  2. AOF 缓冲区根据对应的策略向硬盘做同步操作。
  3. 随着 AOF 文件越来越大,需要定期对 AOF 文件进行重写,达到压缩的目的。
  4. 当 Redis 服务器启动时,可以加载 AOF 文件进行数据恢复。

img

3.2 缓冲区刷新策略

我们上面提到 AOF 实际上是先将数据写入内存缓冲区中,那么此时缓冲区的刷新频率就直接与数据可靠性挂钩 – 缓冲区刷新频率越高,数据可靠性越高,但相对的服务器性能就越低;缓冲区刷新频率越低,数据可靠性越低,但相对的服务器性能就越高。但无论刷新频率多高,只要不是一有修改就立即写入硬盘,就存在数据丢失的风险

因此,AOF 可以看作是效率与数据安全的一种折中方案,同时,为了满足不同应用场景下对效率以及数据安全的不同要求,Redis 支持用户对缓冲区刷新策略进行配置。可选的配置方案如下:

-可配置值-说明
always命令写入 aof_buf 后调用立即 fsync 同步,完成后返回
everysecs命令写入 aof_buf 后只执行 write 操作,不进行 fsync,每秒由同步线程进行 fsync。
no命令写入 aof_buf 后只执行 write 操作,由 OS 控制 fsync。

关于 write 与 fsync:

  • write 操作会触发延迟写(delayed write)机制。Linux 在内核提供页缓冲区用来提供硬盘 IO 性能。write 操作在写入系统缓冲区后立即返回。同步硬盘操作依赖于系统调度机制,例如:缓冲区页空间写满或达到特定时间周期。同步文件之前,如果此时系统故障宕机,缓冲区内数据将丢失。
  • Fsync 针对单个文件操作,做强制硬盘同步,fsync 将阻塞直到数据写入到硬盘。

Redis 默认使用 everysecs 作为缓冲区刷新策略,可以通过配置文件的 appendfsync 选项进行配置。

# The fsync() call tells the Operating System to actually write data on disk
# instead of waiting for more data in the output buffer. Some OS will really flush
# data on disk, some other OS will just try to do it ASAP.
#
# Redis supports three different modes:
#
# no: don't fsync, just let the OS flush the data when it wants. Faster.
# always: fsync after every write to the append only log. Slow, Safest.
# everysec: fsync only one time every second. Compromise.
#
# The default is "everysec", as that's usually the right compromise between
# speed and data safety. It's up to you to understand if you can relax this to
# "no" that will let the operating system flush the output buffer when
# it wants, for better performances (but if you can live with the idea of
# some data loss consider the default persistence mode that's snapshotting),
# or on the contrary, use "always" that's very slow but a bit safer than
# everysec.
#
# More details please check the following article:
# http://antirez.com/post/redis-persistence-demystified.html
#
# If unsure, use "everysec".                                                                                         

# appendfsync always
appendfsync everysec
# appendfsync no

3.3 AOF 重写机制

3.3.1 重写机制介绍

由于 AOF 是不断向文件末尾追加内容的,因此随着命令不断写入 AOF,文件会逐渐变大,为了解决这个问题,Redis 引入 AOF 重写机制来压缩文件体积。较小的 AOF 文件一方面降低了硬盘空间占用,另一方面可以提升启动 Redis 时数据恢复的速度。

重写后的 AOF 为什么可以变小?有如下原因:

  • 进程内已超时的数据不再写入文件。
  • 旧的 AOF 中的无效命令,例如 del、hdel、srem 等重写后将会删除,只需要保留数据的最终版本。
  • 多条写操作合并为一条,例如 lpush list a、lpush list b、lpush list c 可以合并为 lpush list a b c。
  • 注:其实上面合并整理的最终数据就是内存中现有的数据。

因此,AOF 文件重写其实是把 Redis 进程内的数据转化为写命令同步到新的 AOF 文件

3.3.2 混合持久化

  • AOF 本来是按照文本的方式来写入文件的,但是文本的方式写文件,后续加载的成本是比较高的。
  • 因此,Redis 引入了混合持久化的方式,结合了 RDB 和 AOF 的特点。
  • 即按照 AOF 的方式,每一个请求/操作,都记录入文件。在触发 AOF 重写之后,就会把当前内存的状态按照 RDB 的二进制格式写入到新的 AOF 文件中。后续再进行的操作,仍然是按照 AOF 文本的方式追加到文件后面。

因此,我们也可以认为重写是保存当前内存数据的快照

Redis 中,混合持久化默认开启,我们可以通过配置文件中的 aof-use-rdb-preamble 配置项进行关闭。

# When rewriting the AOF file, Redis is able to use an RDB preamble in the
# AOF file for faster rewrites and recoveries. When this option is turned
# on the rewritten AOF file is composed of two different stanzas:
#
#   [RDB file][AOF tail]
#
# When loading Redis recognizes that the AOF file starts with the "REDIS"
# string and loads the prefixed RDB file, and continues loading the AOF
# tail.
aof-use-rdb-preamble yes 

img

3.3.3 重写触发方式

AOF 重写过程可以手动触发和自动触发:

  • 手动触发:调用 bgrewriteaof 命令。
  • 自动触发:根据配置文件中的 auto-aof-rewrite-min-sizeauto-aof-rewrite-percentage 配置项确定自动触发时机。
    • auto-aof-rewrite-min-size:表示触发重写时 AOF 的最小文件大小,默认为 64MB。
    • auto-aof-rewrite-percentage:代表当前 AOF 占用大小相比较上次重写时增加的比例。
# Automatic rewrite of the append only file.
# Redis is able to automatically rewrite the log file implicitly calling
# BGREWRITEAOF when the AOF log size grows by the specified percentage.
#
# This is how it works: Redis remembers the size of the AOF file after the
# latest rewrite (if no rewrite has happened since the restart, the size of
# the AOF at startup is used).
#
# This base size is compared to the current size. If the current size is
# bigger than the specified percentage, the rewrite is triggered. Also
# you need to specify a minimal size for the AOF file to be rewritten, this
# is useful to avoid rewriting the AOF file even if the percentage increase
# is reached but it is still pretty small.
#
# Specify a percentage of zero in order to disable the automatic AOF
# rewrite feature.

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

3.3.4 AOF 重写流程

AOF 的重写流程如下图所示:

img

  1. 执行 AOF 重写请求:如果当前进程正在执行 AOF 重写,请求不执行;如果当前进程正在执行 bgsave 操作,重写命令延迟到 bgsave 完成之后再执行。

  2. 父进程执行 fork 创建子进程,此时子进程保存了父进程当前时刻的内存状态。

  3. 父进程继续继续响应其他命令。

    3.1 父进程将其他命令的修改操作写入 AOF 缓冲区并根据 appendfsync 策略同步到硬盘,保证旧 AOF 文件机制正确。

    3.2 子进程只有 fork 之前的所有内存信息,父进程中需要将 fork 之后这段时间的修改操作写入 AOF 重写缓冲区中。

  4. 子进程根据 fork 时刻的父进程的内存状态创建内存快照,生成新的 AOF 文件,文件内容为二进制格式 (混合持久化)。

  5. 子进程完成重写。

    5.1 新 AOF 写入完毕后,子进程发送信号给父进程。

    5.2 父进程把 AOF 重写缓冲区内临时保存的命令追加到新 AOF 文件中 (文本格式)。

    5.3 用新 AOF 文件替换旧 AOF 文件。

上面有两个比较重要的细节:

  1. 由于子进程只有 fork 时的内存信息,同时子进程生成新 AOF 文件过程中可能有新的修改命令被执行,因此父进程需要维护一个重写缓冲区 aof_rewrite_buf,用来将这段时间内的修改操作追加到新 AOF 文件中。
  2. 重写过程以及文件替换过程可能因为某些因素失败,因此子进程在重写时父进程仍然需要向旧 AOF 文件中写入。

3.4 AOF 优缺点

AOF 持久化的优点在于内存数据更加安全,不易丢失。缺点也很明显,一是频繁的写入硬盘导致效率降低;二是以文本格式存储 AOF 修改操作,服务器重启时恢复数据需要重新执行 AOF 文件中的命令,不过混合持久化对这一点进行了优化。

4 启动时数据恢复

redis-server 启动时,会根据 RDB 和 AOF 文件的内容进行数据恢复。恢复过程如下:

image-20240825145100541

可以看到,AOF 是要优先于 RDB 的,只有当 AOF 未开启时,redis-server 才会使用 RDB 文件进行数据恢复。


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

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

相关文章

OceanBase V4 技术解读:从Alter Table 看DDL的支持

背景 数据库类型可以划分为两大类&#xff1a;关系型数据库和非关系型数据库。而关系型数据库以表格形式进行数据组织&#xff0c;同时遵循表关系的约束&#xff0c;例如创建一张表&#xff0c;表里面包含多个列&#xff0c;不同的列可以有不同的类型。当需要改表结构&#xf…

什么是数据库 DevOps?

在深入研究数据库 DevOps 之前&#xff0c;先回顾一下什么是 DevOps。它没有统一的定义&#xff0c;但我们知道它起源于软件开发方法与部署和运维的结合。 大约 2007 年和 2008 年&#xff0c;软件开发和 IT 界人士提出了这样的担忧&#xff1a;两个行业的分离&#xff0c;即编…

Datawhale X 李宏毅苹果书 AI夏令营(深度学习入门)task3

实践方法论 在应用机器学习算法时&#xff0c;实践方法论能够帮助我们更好地训练模型。如果在 Kaggle 上的结果不太好&#xff0c;虽然 Kaggle 上呈现的是测试数据的结果&#xff0c;但要先检查训练数据的损失。看看模型在训练数据上面&#xff0c;有没有学起来&#xff0c;再…

解锁 TypeScript Record 的奇妙用法:轻松搞定键值对!

在没有非常了解 Record 之前&#xff0c;定义对象的类型&#xff0c;一般使用 interface。它是 TS 中定义数据结构的一种方式&#xff0c;用来描述对象的形状、函数类型、类的结构等。 // 基本用法 interface User {name: string;age: number;isAdmin: boolean; }const user: …

抖音ip地址与实际地址不符是怎么回事

在数字化时代&#xff0c;社交媒体已成为人们日常生活不可或缺的一部分&#xff0c;而抖音作为其中的佼佼者&#xff0c;更是吸引了数以亿计的用户。然而&#xff0c;在使用抖音的过程中&#xff0c;不少用户发现了一个有趣而又令人困惑的现象&#xff1a;抖音显示的IP地址与实…

趣味算法------煤球数目

目录 前言&#xff1a; 题目描述&#xff1a; 解题思路&#xff1a; 具体代码&#xff1a; 前言&#xff1a; 数列在数学中是一个非常基础且重要的概念&#xff0c;它指的是按照一定顺序排列的一系列数。数列中的每一个数被称为该数列的项。 数列可以分为有限数列和无限数列…

7 nestjs 环境变量

安装 pnpm i --save nestjs/confignestjs/config 内部使用 dotenv 实现。 配置 一般会在根模块AppModal中导入&#xff0c;并使用.forRoot()静态方法导入它的配置 import { Module } from nestjs/common; import { ConfigModule } from nestjs/config; ​ Module({imports: …

降低游戏直播软件开发风险:自建团队、外包公司与现成源码

随着游戏直播行业的快速发展&#xff0c;越来越多的企业和个人开始涉足这一领域。然而&#xff0c;在游戏直播软件的开发过程中&#xff0c;选择合适的开发模式对于降低供应链风险至关重要。本文将探讨三种主要的游戏直播软件开发模式&#xff0c;并分析它们各自的风险管理策略…

设计模式篇(行为型模式 - DesignPattern)(持续更新迭代)(图片待加载)

目录 一、模版方法模式&#xff08;制作豆浆问题&#xff09; 1. 豆浆制作问题 2. 模板方法模式 2.1. 基本介绍 2.2. 代码实现 2.3. 钩子方法 2.4. 应用案例 应用一&#xff1a;Android中View的draw 应用二&#xff1a;Spring 框架应用的源码分析 2.5. 注意事项和细节…

泰国中小企业局局长率考察团到访深兰科技

继泰国社会发展和人类安全部考察团的访问之后&#xff0c;深兰科技本周迎来了第二波泰国政府考察团的莅临。 2024年8月23日&#xff0c;泰国中小企业促进局局长巴尼塔西那瓦女士率领泰国东盟企业家协会、泰国法政大学及泰国企业家代表团访问了深兰科技集团总部。深兰科技集团董…

卡牌抽卡机小程序搭建,探索新鲜有趣的拆卡体验

卡牌作为一种新的潮玩方式&#xff0c;市场热度逐渐提升&#xff0c;在各大社交平台上&#xff0c;拆卡的话题层出不穷&#xff0c;各种卡牌迅速走红&#xff0c;成为了当下“顶流”&#xff0c;吸引了众多的消费者&#xff01;卡牌的价格低&#xff0c;还涉及到了动漫等各个热…

电商行业为什么要做私域?

有伙伴提到&#xff0c;他们所在的电商企业是否有必要进行私域运营&#xff0c;担心投入太大。 实际上&#xff0c;私域运营对于电商企业来说是非常有必要的。它是企业的用户数据资产&#xff0c;关乎着企业未来的发展。私域运营能够帮助企业更好地了解用户需求&#xff0c;提…

Vulkan入门系列17 - 多重采样( Multisampling)

一:概述 我们的程序现在可以加载多个级别的纹理,从而解决了在渲染远离观察者的物体时出现的伪影问题。现在图像变得平滑多了,但仔细观察,你会发现绘制的几何图形边缘呈现锯齿状。这在我们早期渲染一个四边形的程序中尤为明显: 这种不希望有的效果被称为 “锯齿”,…

2024高质量:备战金九银十的Java八股文+场景题,看完这篇就够了!

前言 又到一年金九银十面试跳槽季&#xff0c;你准备好了吗&#xff1f; 今天为大家整理了目前互联网出现率最高的大厂面试题&#xff0c;所谓八股文也就是指文章的八个部分&#xff0c;文体有固定格式:由破题、承题、起讲、入题、起股、中股、后股、束股八部分组成&#xff0…

Python 数据分析之Numpy学习(二)

Python 数据分析之Numpy学习&#xff08;二&#xff09; 接上文&#xff1a;Python 数据分析之Numpy学习&#xff08;一&#xff09; 四、数组的索引和切片 索引即通过一个无符号整数值获取数组里的值。Python索引是从0的位置开始。 切片即对数组里某个片段的描述。 # 载入…

虚幻5|制作玩家血量,体力(还未编辑,只用于引用)

未编写&#xff0c;仅引用 优化后&#xff1a; 把增加生命&#xff0c;减少生命&#xff0c;也可以用在体力里&#xff0c;更改如下 限制浮点&#xff0c;如果血量或体力按10来扣&#xff0c;如果你的血量降低到5&#xff0c;那么就会以5的数值来扣&#xff0c;而不会扣成-5…

如何在路由器中抓包分析

方法是在openwrt中一般都集成了tcpdump抓包工具&#xff0c;可以通过命令抓包保存为pcap文件&#xff0c;导出来后可以通过wireshark分析。 相信大部分研发人员都在windows下抓过包&#xff0c;最常用的软件就是wireshark&#xff0c;通过wireshark可以很方便的分析数据报文。抓…

理解运营商和全球网络

目录 理解运营商和全球网络 如何上网 光纤入户 购买设备 配置网络 互联网的发展 引入 国家推动 理解运营商和全球网络 如何上网 光纤入户 也就是俗称的拉网线 将光纤宽带服务直接连接到你家中 光纤是由运营商提供 通过玻璃丝传递光电信号,传进来变成模拟信号,再由调制…

【计算机网络】socket网络编程 --- 实现一些简易UDP网络程序

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前正在学习c和算法 ✈️专栏&#xff1a;Linux &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章有啥瑕疵&#xff0c;希望大佬指点一二 如果文章对…

笔记整理—uboot启动过程(6)env_init与init_sequence总结

上一章说到uboot的BL2部分板级初始化&#xff0c;这一章将继续对uboot的环境变量初始化内容进行说明。 env_init&#xff0c;顾名思义这是与环境变量相关的初始化。env_init有许多个&#xff0c;因为uboot支持不同的启动介质&#xff08;不同的芯片或开发板&#xff09;。其中i…