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

Redis 面试题——持久化

目录

  • 1.概述
    • 1.1.Redis 的持久化功能是指什么?
    • 1.2.Redis 有哪些持久化机制?
  • 2.RDB
    • 2.1.什么是 RDB 持久化?
    • 2.2.Redis 中使用什么命令来生成 RDB 快照文件?
    • 2.3.如何在 Redis 的配置文件中对 RDB 进行配置?
    • 2.4.✨RDB 持久化的工作流程是什么样的?
  • AOF
    • 3.1.什么是 AOF 持久化?
    • 3.2.✨AOF 工作基本流程是怎样的?如何开启 AOF?
    • 3.3.AOF 的持久化方式有哪几种?
    • 3.4.AOF 持久化过程中为什么要使用缓冲区?可能会带来什么问题?
    • 3.5.AOF 持久化的效率和安全性主要受什么因素影响?
    • 3.6.使用 AOF 持久化可能会带来什么问题?如何解决?
    • 3.7.✨AOF 重写的具体过程是什么样的?
    • 3.8.✨AOF 文件的载入与数据还原的过程是什么样的?
    • 3.9.AOF 文件的校验机制是什么样的?
  • 4.RDB & AOF
    • 4.1.✨RDB 和 AOF 这两种持久化方式有什么区别?如何选择合适的持久化方式?
    • 4.2.AOF 文件和 RDB 文件可不可以同时存在?

参考:《Redis 设计与实现》

1.概述

1.1.Redis 的持久化功能是指什么?

因为 Redis 是内存数据库,它将自己的数据储存在内存里面,所以如果不想办法将储存在内存中的数据库状态保存到磁盘里面,那么一旦服务器进程退出,服务器中的数据也会消失不见。为了解决这个问题,Redis 提供了持久化功能,即将 Redis 内存中的数据保存到磁盘上,以保证数据在 Redis 服务器重启后不会丢失

1.2.Redis 有哪些持久化机制?

Redis 提供了两种持久化机制:RDB (Redis DataBase) 持久化AOF (Append Only File) 持久化

2.RDB

2.1.什么是 RDB 持久化?

RDB 是 Redis 的默认持久化机制,它可以在指定的时间间隔内,或在满足一定条件时将 Redis 内存中的数据快照保存到磁盘上,以生成 RDB 文件。RDB 文件是以 Redis 数据库的数据结构和状态为基础,以二进制格式保存在硬盘上。当 Redis 重启时,可以通过加载 RDB 文件将数据恢复到内存中。

2.2.Redis 中使用什么命令来生成 RDB 快照文件?

(1)Redis 提供了以下两个命令来生成 RDB 快照文件:

  • save:该命令会阻塞 Redis 服务器,直到快照过程完成,期间不会处理其他客户端的请求。它会将当前数据库的数据保存到一个 RDB 文件中。
  • bgsave:该命令会在后台执行快照过程,不会阻塞 Redis 服务器。它会创建一个子进程来执行 RDB 快照,并在子进程完成后继续处理其他客户端请求(默认选项)。bgsave 中的 bg 是指 background,即将数据快照操作放到后台执行,以确保 Redis 服务器不会停止响应其他命令请求。

(2)使用 save 命令会阻塞服务器,直到快照完成,适用于对服务器负载影响较小且可以容忍阻塞的情况。而 bgsave 命令则不会阻塞服务器,适用于对服务器负载有较高要求或不能容忍阻塞的情况。生成的 RDB 快照文件会保存在 Redis 服务器指定的路径下,通常是由配置文件中的 dir 选项指定的路径。文件名类似于 dump.rdb,并且会覆盖之前生成的快照文件。

2.3.如何在 Redis 的配置文件中对 RDB 进行配置?

(1)在 Redis 的配置文件 redis.conf 文件中,默认有 RDB 持久化配置:

save 900 1
save 300 10
save 60 10000

这些配置称为检查点。上面 3 个检查点的解释依次为:

  • 每隔 900s,如果有至少 1 个 key 发生了变更,就生成一个新的 dump.rdb 文件,这个 dump.rdb 文件就是 redis 内存中完整的数据快照,也叫做 snapshotting
  • 每隔 300s,检查是否有 10 个key 发生了变更,如果有,则生成 dump.rdb 文件。
  • 每隔 60s,检查是否有 10000个 key 发生了变更,如果有,则生成 dump.rdb 文件。

(2)可以配置多项检查点,也可以移除所有检查点,只需要如下配置即可:

save ""

2.4.✨RDB 持久化的工作流程是什么样的?

(1)RDB 是 Redis 中的一种持久化方式,用于将数据库中的数据保存到硬盘上。下面是 RDB 持久化的一般工作流程:

  • 触发保存指令生成快照文件:RDB 持久化的过程可以通过手动触发或配置自动触发。手动触发可以使用 SAVEBGSAVE 指令,而自动触发可以通过配置 Redis 的参数来实现,例如通过设置 save 配置项。
  • 创建子进程:当保存指令被触发后,Redis 会创建一个子进程来执行实际的持久化操作。子进程的创建通常会通过 fork 系统调用,在子进程中执行持久化操作,而父进程则继续处理客户端请求。
  • 写入数据:子进程开始执行持久化操作后,会遍历数据库中的所有键值对,并将数据写入到一个临时文件中。这个过程中,Redis 会将数据库的所有写操作都缓存到内存中,以保证数据的一致性。
  • 写入完成后替换文件:当子进程将数据写入临时文件后,会通过一个原子操作,用临时文件替换掉原来的 RDB 文件。这样做可以保证在持久化过程中,其他客户端对数据的访问不受影响,只有在替换完成后,才会对外提供最新的 RDB 文件。
  • 完成持久化:子进程完成文件替换后,会终止自身进程并返回结果给父进程。父进程会相应地更新相关的元数据,标识持久化操作已经完成。

(2)总的来说,RDB 持久化的工作流程是由触发指令、创建子进程、写入数据、替换和持久化完成这几个步骤组成。通过这个流程,Redis 可以将内存中的数据保存到硬盘上,实现数据的持久化和恢复。需要注意的是,RDB 持久化是一种快照方式,保存的是数据在某个时间点的状态,因此在进行恢复时,会使用最新的 RDB 文件进行加载。

AOF

3.1.什么是 AOF 持久化?

AOF 持久化是指在每次写操作时将操作记录追加到 AOF 文件末尾。这样,当 Redis 重启时,可以通过重新执行 AOF 文件中的操作来恢复 Redis 数据库中的数据。

3.2.✨AOF 工作基本流程是怎样的?如何开启 AOF?

(1)AOF 持久化功能的实现可以分为以下几步:

  • 命令追加 (append):服务器在执行完一个写命令之后,会以协议格式将被执行的写命令追加到服务器状态的 aof_buf 缓冲区的末尾:
  • 文件写入 (write):将 AOF 缓冲区的数据写入到 AOF 文件中。这一步需要调用 write 函数(系统调用),write 函数将数据写入到了系统内核缓冲区之后直接返回(延迟写)。需要注意的是,此时并没有同步到磁盘
  • 文件同步 (fsync):AOF 缓冲区根据对应的持久化方式(fsync 策略)向硬盘做同步操作。这一步需要调用 fsync 函数(系统调用), fsync 针对单个文件操作,对其进行强制硬盘同步,fsync 将阻塞直到写入磁盘完成后返回,保证了数据持久化。
  • 文件重写 (rewrite):随着 AOF 文件越来越大,需要定期对 AOF 文件进行重写,达到压缩 AOF 文件的目的。
  • 重启加载 (load):当 Redis 重启时,可以加载 AOF 文件进行数据恢复

(2)AOF 持久化配置默认是关闭的,所以需要手动开启,即在 Redis 配置文件 redis.conf 中添加如下配置即可:

appendonly yes

同理,如果上述配置为 appendonly no,则表示关闭 AOF 持久化。开启 AOF 持久化后就可以写入持久化文件 appendonly.aof 中,当然这个文件名字也是可以通过配置项 appendfilename 来设置的。

3.3.AOF 的持久化方式有哪几种?

(1)在 Redis 的配置文件中存在三种不同的 AOF 持久化方式(即 appendfsync 选项的值),它们分别是:

在这里插入图片描述
(2)如果用户没有主动为 appendfsync 选项设置值,那么 appendfsync 选项的默认值为 everysec,其原因在于 everysec 兼顾了数据和写入性能。它让 Redis 每秒同步一次 AOF 文件,Redis 性能受到的影响较小。而且这样即使出现系统崩溃,用户最多只会丢失一秒之内产生的数据。当硬盘忙于执行写入操作的时候,Redis 还会放慢自己的速度以便适应硬盘的最大写入速度。

3.4.AOF 持久化过程中为什么要使用缓冲区?可能会带来什么问题?

(1)为了提高文件的写入效率,在现代操作系统中,当用户调用 write 函数,将一些数据写入到文件的时候,操作系统通常会将写入数据暂时保存在一个内存缓冲区里面,等到缓冲区的空间被填满、或者超过了指定的时限之后,才真正地将缓冲区中的数据写入到磁盘里面。

(2)这种做法虽然提高了效率,但也为写入数据带来了安全问题,因为如果计算机发生停机,那么保存在内存缓冲区里面的写入数据将会丢失。为此,系统提供了 fsyncfdatasync 两个同步函数,它们可以强制让操作系统立即将缓冲区中的数据写入到硬盘里面,从而确保写入数据的安全性。

3.5.AOF 持久化的效率和安全性主要受什么因素影响?

(1)服务器配置 appendfsync 选项的值直接决定 AOF 持久化功能的效率和安全性:

  • 当 appendfsync 的值为 always 时,服务器在每个事件循环都要将 aof_buf 缓冲区中的所有内容写入到 AOF 文件,并且同步 AOF 文件,所以 always 的效率是 appendfsync 选项三个值当中最慢的一个,但从安全性来说,always 也是最安全的,因为即使出现故障停机,AOF 持久化也只会丢失一个事件循环中所产生的命令数据。
  • 当 appendfsync 的值为 everysec 时,服务器在每个事件循环都要将 aof_buf 缓冲区中的所有内容写入到 AOF 文件,并且每隔一秒就要在子线程中对AOF 文件进行一次同步。从效率上来讲,everysec 模式足够快,并且就算出现故障停机,数据库也只丢失一秒钟的命令数据。
  • 当 appendfsync 的值为 no 时,服务器在每个事件循环都要将 aof_buf 缓冲区中的所有内容写入到 AOF 文件,至于何时对 AOF 文件进行同步,则由操作系统控制。因为处于 no 模式下的 flushAppendonlyFile 调用无须执行同步操作,所以该模式下的 AOF 文件写入速度总是最快的,不过因为这种模式会在系统缓存中积累一段时间的写入数据,所以该模式的单次同步时长通常是三种模式中时间最长的。

(2)从平摊操作的角度来看,no 模式和 everysec 模式的效率类似,当出现故障停机时,使用 no 模式的服务器将丢失上次同步 AOF 文件之后的所有写命令数据。

3.6.使用 AOF 持久化可能会带来什么问题?如何解决?

(1)如果使用 AOF 持久化,可能会带来以下两个问题:

  • 因为 Redis 会不断地将被执行的写命令记录到 AOF 文件里面,所以随着 Redis 不断运行,AOF 文件的体积也会不断增长,在极端情况下,体积不断增大的 AOF 文件甚至可能会用完硬盘的所有可用空间
  • 因为 Redis 在重启之后需要通过重新执行 AOF 文件记录的所有写命令来还原数据集,所以如果 AOF 文件的体积非常大,那么还原操作执行的时间就可能会非常长

(2)为了解决 AOF 文件体积不断增大的问题,用户可以向 Redis 发送 BGREWRITEAOF 命令,这个命令会通过移除 AOF 文件中的冗余命令来重写 (rewrite) AOF 文件,使 AOF 文件的体积变得尽可能地小。BGREWRITEAOF 的工作原理和 BGSAVE 创建快照的工作原理非常相似:Redis 会创建一个子进程,然后由子进程负责对 AOF 文件进行重写

注意:因为 AOF 文件重写也需要用到子进程,所以快照持久化因为创建子进程而导致的性能问题和内存占用问题,在 AOF 持久化中也同样存在。更糟糕的是,如果不加以控制的话,AOF 文件的体积可能会比快照文件的体积大好几倍,在进行 AOF 重写并删除旧 AOF 文件的时候,删除一个体积达到数十 GB 大的旧 AOF 文件可能会导致操作系统挂起 (hang) 数秒。

(3)AOF 持久化也可以通过设置下面两个选项来自动执行 BGREWRITEAOF

  • auto-aof-rewrite-min-size:该值表示触发 AOF 重写的 AOF 文件最小值。如果 AOF 文件大小小于该值,则不会触发 AOF 重写,默认值为 64 MB
  • auto-aof-rewrite-percentage:该值表示当前 AOF 大小 aof_current_size 和上一次重写时 AOF 大小 aof_base_size 的比值。如果当前 AOF 文件大小增加了这个百分比值,将触发 AOF 重写。将此值设置为 0 将禁用自动 AOF 重写,默认值为 100

举个例子,假设用户对 Redis 设置了配置选项 auto-aof-rewrite-percentage 100auto-aof-rewrite-min-size 64mb,并且启用了 AOF 持久化,那么当 AOF 文件的体积大于 64 MB,并且 AOF 文件的体积比上一次重与之后的体积大了至少一倍的时候,Redis 将执行 BGREWRITEAOF 命令。如果 AOF 重写执行得过于频繁的话,用户可以考虑将 auto-aof-rewrite-percentage 选项的值设置为 100 以上,这种做法可以让 Redis 在 AOF 文件的体积变得更大之后才执行重写操作,不过也会让 Redis 在启动时还原数据集所需的时间变得更长。

3.7.✨AOF 重写的具体过程是什么样的?

(1)AOF 是 Redis 里面的一种数据持久化方式,它采用了指令追加的方式,近乎实时地去实现数据指令的持久化,因为 AOF 持久化会把每个数据更改的操作指令,追加存储到 AOF 文件里面。所以很容易导致 AOF 文件出现过大,造成 I/O 性能问题。

(2)Redis 为了解决这个问题,设计了 AOF 重写机制,也就是说把 AOF 文件里面相同的指令进行压缩,只保留最新的数据指令。简单来说,如果 AOF 文件里面存储了某个 key 的多次变更记录,但是实际上,最终在做数据恢复的时候,只需要执行最新的指令操作就行了,历史的数据就没必要存在这个文件里面占空间。

(3)AOF 文件重写的具体过程分为以下几步:

  • 首先,根据当前 Redis 内存里面的数据,重新构建一个新的 AOF 文件
  • 然后,读取当前 Redis 里面的数据,写入到新的 AOF 文件里面;
  • 最后,重写完成以后,用新的 AOF 文件覆盖现有的 AOF 文件

(4)在这个过程有三个需要注意的地方:

  • 因为 AOF 在重写的过程中需要读取当前内存里面所有的键值数据,再生成对应的一条指令进行保存。而这个过程是比较耗时的,对业务会产生影响。所以 Redis 把重写的过程放在一个后台子进程里面来完成,这样一来,子进程在做重写的时候,主进程依然可以继续处理客户端请求。
  • 为了避免子进程在重写过程中,主进程的数据发生变化,导致 AOF 文件和 Redis 内存中的数据不一致的问题,Redis 做了一层优化,即子进程在重写的过程中,主进程的数据变更需要追加到 AOF 重写缓冲区里面。等到 AOF 文件重写完成以后,再把 AOF 重写缓冲区里面的内容追加到新的 AOF 文件里面。
  • 在进行 AOF 文件重写时,需要新建一个 AOF 文件,并将重写后的结果写入到该文件中,而不能直接在原 AOF 文件上进行操作,这样做的目的在于防止在重写过程中系统出现异常,从而导致在数据还原时原 AOF 文件中的出现数据不一致的情况。

3.8.✨AOF 文件的载入与数据还原的过程是什么样的?

(1)AOF 文件的载入于数据还原的过程如下:

  • ① 创建一个不带网络连接的伪客户端 (fake client):因为 Redis 的命令只能在客户端上下文中执行,而载入 AOF 文件时所使用的命令直接来源于 AOF 文件而不是网络连接,所以服务器使用了一个没有网络连接的伪客户端来执行 AOF 文件保存的写命令,伪客户端执行命令的效果和带网络连接的客户端执行命令的效果完全一样。
  • ② 从 AOF 文件中分析并读取出一条写命令。
  • ③ 使用伪客户端执行被读出的写命令。
  • ④ 一直执行步骤 ② 和步骤 ③,直到 AOF 文件中的所有写命令都被处理完毕为止。

(2)当完成以上步骤之后,AOF 文件所保存的数据库状态就会被完整地还原出来,整个过程如下图所示:

在这里插入图片描述

3.9.AOF 文件的校验机制是什么样的?

(1)Redis 的 AOF 持久化机制中,存在校验和 (checksum) 的校验机制,用于确保 AOF 文件内容的完整性。

(2)在 Redis 的 AOF 持久化过程中,每次写入操作完成后,Redis 都会计算校验和并将其附加到 AOF 文件的结尾。当 Redis 重新读取 AOF 文件时,它会根据文件内容计算校验和,并将其与 AOF 文件结尾附加的校验和进行比较。如果两者不相等,则意味着 AOF 文件已经被损坏或者篡改,Redis 将拒绝加载文件并退出。Redis 使用的校验和算法是 CRC64 校验和算法,这是一种广泛应用于数据传输和存储中的校验和算法,能够提供较高的校验精度并具有较高的执行效率。

(3)因为校验和机制的存在,Redis 的 AOF 文件具有较高的数据完整性和安全性,可以有效避免硬件故障、操作系统错误以及网络攻击等因素对 AOF 文件内容的破坏。在 Redis 的实际应用场景中,AOF 文件的校验机制为用户提供了一种有效的保护机制,帮助用户保障数据的安全和完整性。

4.RDB & AOF

4.1.✨RDB 和 AOF 这两种持久化方式有什么区别?如何选择合适的持久化方式?

(1)RDB 和 AOF 这两种持久化方式的区别如下所示:

RDBAOF
文件格式将 Redis 的数据结构以二进制格式保存在磁盘上将 Redis 服务器接收到的每个写操作以文本格式追加到 AOF 文件末尾,是一种易于理解和解析的格式包含所有操作的日志,我们可以轻松地导出 AOF 文件进行分析,也可以直接操作 AOF 文件来解决一些问题
文件大小生成的文件较小,因为它是以快照的方式保存 Redis 数据库的状态,适合做数据的备份,灾难恢复AOF 文件通常比 RDB 文件大,因为它需要保存每个写操作
数据恢复速度通常比 AOF 持久化快,因为 RDB 文件中的数据是 Redis 数据库的状态的快照,直接解析还原数据即可,不需要一条一条地执行命令,速度非常快需要将文件中的每个操作依次执行才能将数据恢复到 Redis 内存中,因此数据恢复速度比 RDB 慢
数据丢失因为 RDB 文件是定期生成的快照,如果 Redis 在快照生成之后崩溃,就可能会丢失一部分数据,无法做到实时备份数据AOF 持久化可以在每个写操作后追加到 AOF 文件中,实时记录操作历史,避免数据丢失
对性能的影响对性能影响相对较小,因为它是在指定的时间间隔内进行快照,不会在每次写操作时执行。但是,在进行快照时,Redis 会 fork 出一个子进程来处理快照生成的过程,如果 Redis 内存中的数据量比较大,fork 的过程会占用较高的 CPU 和内存资源,影响 Redis 的正常运行对性能影响相对较大,因为它会在每个写操作时执行,将写操作记录到 AOF 文件中,由于 AOF 文件需要频繁地写入,如果磁盘的写入性能比较低,可能会影响 Redis 的写入性能
安全性RDB 的数据安全性不如 AOF,没有办法实时或者秒级持久化数据AOF 支持秒级数据丢失(取决 fsync 策略,如果是 everysec,最多丢失 1 秒的数据),仅仅是追加命令到 AOF 文件,操作轻量

(2)选择持久化方式的建议:

  • Redis 保存的数据丢失一些也没什么影响的话,可以选择使用 RDB;
  • 不建议单独使用 AOF,因为时不时地创建一个 RDB 快照可以进行数据库备份、更快的重启以及解决 AOF 引擎错误;
  • 如果保存的数据要求安全性比较高的话,建议同时开启 RDB 和 AOF 持久化或者开启 RDB 和 AOF 混合持久化

4.2.AOF 文件和 RDB 文件可不可以同时存在?

AOF 和 RDB 是可以同时存在的,只不过需要注意以下几点:

  • 同时生成了 RDB 和 AOF 文件,先使用 AOF 进行数据恢复。
  • 如果 RDB 正在生成快照文件,而用户又在执行 AOF 重写命令,那么需要等到 RDB 快照生成之后,才会执行 AOF 重写。
  • 如果 RDB 正在生成快照文件,那么 Redis 不会去执行 AOF 重写,相反也是。

相关文章:

Redis 面试题——持久化

目录 1.概述1.1.Redis 的持久化功能是指什么?1.2.Redis 有哪些持久化机制? 2.RDB2.1.什么是 RDB 持久化?2.2.Redis 中使用什么命令来生成 RDB 快照文件?2.3.如何在 Redis 的配置文件中对 RDB 进行配置?2.4.✨RDB 持久化…...

Linux使用固定ip地址

设置静态ip,我们就需要修改 /etc/sysconfig/network-scripts/ifcfg-ens33 配置文件。 vim /etc/sysconfig/network-scripts/ifcfg-ens33 //进入网卡ens33的配置页面 (1) 将 BOOTPROTO dhcp 改成 BOOTPROTO static 也就是将动态ip,改成静态i…...

ESP Multi-Room Music 方案:支持音频实时同步播放 实现音乐互联共享

项目背景 随着无线通信技术的发展,针对不同音频应用领域的无线音频产品正不断涌现。近日,乐鑫科技推出了基于 Wi-Fi 的多扬声器互联共享音乐通信协议——ESP Multi-Room Music 方案。该方案使用乐鑫自研的基于 Wi-Fi 局域网的音频同步播放技术&#xff…...

java分布式锁分布式锁

java分布式&锁&分布式锁 锁 锁的作用:有限资源的情况下,控制同一时间段,只有某些线程(用户/服务器)能访问到资源。 锁在java中的实现: synchronized关键字并发包的类 缺点:只对单个的…...

2. 流程控制|方法|数组|二维数组|递归

文章目录 流程控制代码块选择结构循环结构跳转控制关键字 方法方法的概述方法的重载Junit单元测试初识全限定类名 Debug 小技巧数组数组的基本概念数组的基本使用数组的声明数组的初始化 JVM内存模型什么是引用数据类型基本数据类型和引用数据类型的区别堆和栈中内容的区别 数组…...

22. 自动装配有哪些限制(需要注意)?

自动装配有哪些限制(需要注意)&#xff1f; 一定要声明set方法覆盖&#xff1a; 你仍可以用 < constructor-arg >和 < property > 配置来定义依赖&#xff0c;这些配置将始终覆盖自动注入。基本数据类型&#xff1a;不能自动装配简单的属性&#xff0c;如基本数据…...

14 网关实战:网关聚合API文档

上节课介绍了网关层的认证鉴权,今天这节介绍一下网关层如何聚合API接口文文档。 为什么需要聚合API接口文档? 大型微服务系统模块众多,木谷博客系统就有9个,如果这些服务的接口地址没有一个统一,那么客户端将要保存每个服务的接口地址,这个肯定是不现实。 先来看一下A…...

css 固定按钮到页面顶部或者底部的实现方式

实现方式 要将按钮固定到顶部或底部&#xff0c;可以使用CSS的定位属性来实现。下面是一种常用的方法&#xff1a; 创建一个包含按钮的HTML元素&#xff0c;例如一个<div>元素。确保给它添加一个唯一的id&#xff0c;以便在CSS中进行定位。 <div id"myButton&qu…...

【Java Spring】SpringBoot常用插件

文章目录 1、Lombok1.1 IDEA社区版安装Lombok1.2 IDEA专业版安装Lombok1.3 Lombok的基本使用 2、EditStarters2.1 IDEA安装EditStarters2.2 EditStarters基本使用方法 1、Lombok 是简化Java开发的一个必要工具&#xff0c;lombok的原理是编译过程中将lombok的注解给去掉并翻译…...

GPT还远远不是真正的智能

GPT是一个基于深度学习的自然语言处理模型&#xff0c;它可以生成逼真的文本。虽然GPT在生成文本方面取得了显著的进展&#xff0c;但它并不具备真正的智能。GPT是通过训练模型来学习语言模式&#xff0c;它不具备理解、推理、判断和主动学习的能力。它只是根据已有的语料库生成…...

计算机网络:网络层

0 本节主要内容 问题描述 解决思路 1 问题描述 两大问题&#xff08;重点&#xff0c;也是难点&#xff09;&#xff1a; 地址管理&#xff1b;路由选择。 1.1 子问题1&#xff1a;地址管理 网络上的这些主机和节点都需要使用一种规则来区分&#xff0c;就相当于是一种身…...

消息队列进阶-1.消息队列的应用场景与选型

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring源码、JUC源码、Kafka原理&#x1f525;如果感觉博主的文章还不错的话&#xff0c;请&#x1f44…...

浅谈堆和栈内存以及编程语言

浅谈堆和栈内存以及编程语言 栈和堆C 和 C# 的区别&#xff1a;C#总结 编程语言C汇编语言&#xff08;Assembly Language&#xff09;&#xff1a;机器语言&#xff08;Machine Language&#xff09;&#xff1a; 拓展C#依赖注入&#xff08;Dependency Injection&#xff09;模…...

SpringBootWeb案例_01

Web后端开发_04 SpringBootWeb案例_01 原型展示 成品展示 准备工作 需求&环境搭建 需求说明&#xff1a; 完成tlias智能学习辅助系统的部门管理&#xff0c;员工管理 环境搭建 准备数据库表&#xff08;dept、emp&#xff09;创建springboot工程&#xff0c;引入对应…...

C语言数据结构-----栈和队列练习题(分析+代码)

前言 前面的博客写了如何实现栈和队列&#xff0c;下来我们来看一下队列和栈的相关习题。 链接: 栈和队列的实现 文章目录 前言1.用栈实现括号匹配2.用队列实现栈3.用栈实现队列4.设计循环队列 1.用栈实现括号匹配 此题最重要的就是数量匹配和顺序匹配。 用栈可以完美的做到…...

uniapp基础-教程之HBuilderX配置篇-01

uniapp教程之HBuilderX配置篇-01 为什么要做这个教程的梳理&#xff0c;主要用于自己学习和总结&#xff0c;利于增加自己的积累和记忆。首先下载HBuilderX&#xff0c;并保证你的软件在C盘进行运行&#xff0c;最好使用英文或者拼音&#xff0c;这个操作是为了保证软件的稳定…...

【备忘录】快速回忆ElasticSearch的CRUD

导引——第一条ElasticSearch语句 测试分词器 POST /_analyze {"text":"黑马程序员学习java太棒了","analyzer": "ik_smart" }概念 语法规则 HTTP_METHOD /index/_action/IDHTTP_METHOD 是 HTTP 请求的方法&#xff0c;常见的包括…...

影响PPC广告成本预算的因素,如何计算亚马逊PPC广告预算——站斧浏览器

亚马逊PPC&#xff0c;又称按点击付费(Pay Per Click)&#xff0c;是一种只有用户点击你的广告时才会向你收费的模式。那么影响PPC广告成本预算的因素,如何计算亚马逊PPC广告预算&#xff1f; 影响PPC广告成本预算的因素 1、产品类别&#xff1a;不同类别的产品竞争程度不同&…...

Qt 信号和槽

目录 概念 代码 mainwindow.h me.h xiaohuang.h main.cc mainwindow.cc me.cc xianghuang.cc mainwindow.ui 自定义信号的要求和注意事项: 自定义槽的要求和注意事项: 概念 信号槽是 Qt 框架引以为豪的机制之一。所谓信号槽&#xff0c;实际就是观察者模式(发布-订…...

Linux基本命令二

Linux基本命令二 1、head 命令 head ​ **作用&#xff1a;**用于查看文件的开头部分的内容&#xff0c;有一个常用的参数 -n 用于显示行数&#xff0c;默认为 10&#xff0c;即显示 10 行的内容 ​ **语法&#xff1a;**head [参数] [文件] ​ 命令参数&#xff1a; 参数…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

EtherNet/IP转DeviceNet协议网关详解

一&#xff0c;设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络&#xff0c;本网关连接到EtherNet/IP总线中做为从站使用&#xff0c;连接到DeviceNet总线中做为从站使用。 在自动…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)

目录 一、&#x1f44b;&#x1f3fb;前言 二、&#x1f608;sinx波动的基本原理 三、&#x1f608;波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、&#x1f30a;波动优化…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

嵌入式常见 CPU 架构

架构类型架构厂商芯片厂商典型芯片特点与应用场景PICRISC (8/16 位)MicrochipMicrochipPIC16F877A、PIC18F4550简化指令集&#xff0c;单周期执行&#xff1b;低功耗、CIP 独立外设&#xff1b;用于家电、小电机控制、安防面板等嵌入式场景8051CISC (8 位)Intel&#xff08;原始…...

C# winform教程(二)----checkbox

一、作用 提供一个用户选择或者不选的状态&#xff0c;这是一个可以多选的控件。 二、属性 其实功能大差不差&#xff0c;除了特殊的几个外&#xff0c;与button基本相同&#xff0c;所有说几个独有的 checkbox属性 名称内容含义appearance控件外观可以变成按钮形状checkali…...