超详细Redis入门教程——Redis 持久化

news2024/12/23 8:40:05

前言

在这里插入图片描述

本文小新为大家带来 超详细Redis入门教程——Redis 持久化 相关知识,具体内容包括持久化基本原理RDB 持久化(包括:持久化的执行RDB 优化配置RDB 文件结构RDB 持久化过程),AOF 持久化(包括:AOF 基础配置AOF 文件格式Rewrite 机制AOF 优化配置AOF 持久化过程),RDB 与 AOF 对比持久化技术选型等进行详尽介绍~

不积跬步,无以至千里;不积小流,无以成江海。每天进步一点点,在成为强者的路上,小新与大家共同成长!

📌博主主页:小新要变强 的主页
👉Java全栈学习路线可参考:【Java全栈学习路线】最全的Java学习路线及知识清单,Java自学方向指引,内含最全Java全栈学习技术清单~
👉算法刷题路线可参考:算法刷题路线总结与相关资料分享,内含最详尽的算法刷题路线指南及相关资料分享~
👉Java微服务开源项目可参考:企业级Java微服务开源项目(开源框架,用于学习、毕设、公司项目、私活等,减少开发工作,让您只关注业务!)

↩️本文上接:超详细Redis入门教程——Redis命令(下)


目录

超详细Redis入门教程——Redis 持久化

  • 前言
  • 目录
  • 一、持久化基本原理
  • 二、RDB 持久化
    • 1️⃣持久化的执行
    • 2️⃣RDB 优化配置
    • 3️⃣RDB 文件结构
    • 4️⃣RDB 持久化过程
  • 三、AOF 持久化
    • 1️⃣AOF 基础配置
    • 2️⃣AOF 文件格式
    • 3️⃣Rewrite 机制
    • 4️⃣AOF 优化配置
    • 5️⃣AOF 持久化过程
  • 四、RDB 与 AOF 对比
    • 1️⃣RDB 优势与不足
    • 2️⃣AOF 优势与不足
  • 五、持久化技术选型
  • 后记

在这里插入图片描述

Redis 是一个内存数据库,所以其运行效率非常高。但也存在一个问题:内存中的数据是不持久的,若主机宕机或 Redis 关机重启,则内存中的数据全部丢失。当然,这是不允许的。Redis 具有持久化功能,其会按照设置以快照或操作日志的形式将数据持久化到磁盘。

根据持久化使用技术的不同,Redis 的持久化分为两种:RDB 与 AOF。

一、持久化基本原理

在这里插入图片描述

Redis 持久化也称为钝化,是指将内存中数据库的状态描述信息保存到磁盘中。只不过是不同的持久化技术,对数据的状态描述信息是不同的,生成的持久化文件也是不同的。但它们的作用都是相同的:避免数据意外丢失。

通过手动方式,或自动定时方式,或自动条件触发方式,将内存中数据库的状态描述信息写入到指定的持久化文件中。当系统重新启动时,自动加载持久化文件,并根据文件中数据库状态描述信息将数据恢复到内存中,这个数据恢复过程也称为激活。这个钝化与激活的过程就是 Redis 持久化的基本原理。

不过从以上分析可知,对于 Redis 单机状态下,无论是手动方式,还是定时方式或条件触发方式,都存在数据丢失问题:在尚未手动/自动保存时发生了 Redis 宕机状况,那么从上次保存到宕机期间产生的数据就会丢失。不同的持久化方式,其数据的丢失率也是不同的。

在这里插入图片描述

需要注意的是,RDB 是默认持久化方式,但 Redis 允许 RDB 与 AOF 两种持久化技术同时开启,此时系统会使用 AOF 方式做持久化,即 AOF 持久化技术的优先级要更高。同样的道理,两种技术同时开启状态下,系统启动时若两种持久化文件同时存在,则优先加载 AOF 持久化文件。

二、RDB 持久化

RDB,Redis DataBase,是指将内存中某一时刻的数据快照全量写入到指定的 rdb 文件的持久化技术。RDB 持久化默认是开启的。当 Redis 启动时会自动读取 RDB 快照文件,将数据从硬盘载入到内存,以恢复 Redis 关机前的数据库状态。

1️⃣持久化的执行

RDB 持久化的执行有三种方式:手动 save 命令、手动 bgsave 命令,与自动条件触发。

🍀(1)手动 save 命令

在这里插入图片描述

通过在 redis-cli 客户端中执行 save 命令可立即进行一次持久化保存。save 命令在执行期间会阻塞 redis-server 进程,直至持久化过程完毕。而在 redis-server 进程阻塞期间,Redis 不能处理任何读写请求,无法对外提供服务。

🍀(2)手动 bgsave 命令

在这里插入图片描述

通过在 redis-cli 客户端中执行 bgsave 命令可立即进行一次持久化保存。不同于 save 命令的是,正如该命令的名称一样,background save,后台运行 save。bgsave 命令会使服务器进程 redis-server 生成一个子进程,由该子进程负责完成保存过程。在子进程进行保存过程中,不会阻塞 redis-server 进程对客户端读写请求的处理。

🍀(3)自动条件触发

自动条件触发的本质仍是 bgsave 命令的执行。只不过是用户通过在配置文件中做相应的设置后,Redis 会根据设置信息自动调用 bgsave 命令执行。

具体配置方式,后面会详解。

🍀(4)查看持久化时间

通过 lastsave 命令可以查看最近一次执行持久化的时间,其返回的是一个 Unix 时间戳。

在这里插入图片描述

2️⃣RDB 优化配置

RDB 相关的配置在 redis.conf 文件的 SNAPSHOTTING 部分。

在这里插入图片描述

🍀(1)save

在这里插入图片描述

该配置用于设置快照的自动保存触发条件,即 save point,保存点。该触发条件是在指定时间段内发生了指定次数的写操作。除非另有规定,默认情况下持久化条件为 save 3600 1 ; 300 100 ; 60 10000。其等价于以下三条:

  • save 3600 1 # 在 3600 秒(1 小时)内发生 1 次写操作
  • save 300 100 # 在 300 秒(5 分钟)内发生 100 次写操作
  • save 60 10000 # 在 60 秒(1 分钟)内发生 1 万次写操作

如果不启用 RDB 持久化,只需设置 save 的参数为空串即可:save “”。

🍀(2)stop-write-on-bgsave-error

在这里插入图片描述

默认情况下,如果 RDB 快照已启用(至少一个保存点),且最近的 bgsave 命令失败,Redis 将停止接受写入。这样设置是为了让用户意识到数据没有正确地保存到磁盘上,否则很可能没有人会注意到,并会发生一些灾难。当然,如果 bgsave 命令后来可以正常工作了,Redis 将自动允许再次写入。

🍀(3)rdbcompression

在这里插入图片描述

当进行持久化时启用 LZF 压缩字符串对象。虽然压缩 RDB 文件会消耗系统资源,降低性能,但可大幅降低文件的大小,方便保存到磁盘,加速主从集群中从节点的数据同步。

🍀(4)rdbchecksum

在这里插入图片描述

从 RDB5 开始,RDB 文件的 CRC64 校验和就被放置在了文件末尾。这使格式更能抵抗 RDB 文件的损坏,但在保存和加载 RDB 文件时,性能会受到影响(约 10%),因此可以设置为 no 禁用校验和以获得最大性能。在禁用校验和的情况下创建的 RDB 文件的校验和为零,这将告诉加载代码跳过校验检查。默认为 yes,开启了校验功能。

🍀(5)sanitize-dump-payload

在这里插入图片描述

该配置用于设置在加载 RDB 文件或进行持久化时是否开启对 zipList、listPack 等数据的全面安全检测。该检测可以降低命令处理时发生系统崩溃的可能。其可设置的值有三种选择:

  • no:不检测
  • yes:总是检测
  • clients:只有当客户端连接时检测。排除了加载 RDB 文件与进行持久化时的检测。

默认值本应该是 clients,但其会影响 Redis 集群的工作,所以默认值为no,不检测。

🍀(6)dbfilename

在这里插入图片描述

指定 RDB 文件的默认名称,默认为 dump.rdb。

🍀(7)rdb-del-sync-files

在这里插入图片描述

主从复制时,是否删除用于同步的从机上的 RDB 文件。默认是 no,不删除。不过需要注意,只有当从机的 RDB 和 AOF 持久化功能都未开启时才生效。

🍀(8)dir

在这里插入图片描述

指定 RDB 与 AOF 文件的生成目录。默认为 Redis 安装根目录。

3️⃣RDB 文件结构

RDB 持久化文件 dump.rdb 整体上有五部分构成:

在这里插入图片描述

🍀(1)SOF

SOF 是一个常量,一个字符串 REDIS,仅包含这五个字符,其长度为 5。用于标识 RDB 文件的开始,以便在加载 RDB 文件时可以迅速判断出文件是否是 RDB 文件。

🍀(2)rdb_version

这是一个整数,长度为 4 字节,表示 RDB 文件的版本号。

🍀(3)EOF

EOF 是一个常量,占 1 个字节,用于标识 RDB 数据的结束,校验和的开始。

🍀(4)check_sum

校验和 check_sum 用于判断 RDB 文件中的内容是否出现数据异常。其采用的是 CRC 校验算法。

CRC 校验算法:

在持久化时,先将 SOF、rdb_version 及内存数据库中的数据快照这三者的二进制数据拼接起来,形成一个二进制数(假设称为数 a),然后再使用这个 a 除以校验和 check_sum,此时可获取到一个余数 b,然后再将这个 b 拼接到 a 的后面,形成 databases。

在加载时,需要先使用 check_sum 对 RDB 文件进行数据损坏验证。验证过程:只需将 RDB 文件中除 EOF 与 check_sum 外的数据除以 check_sum。只要除得的余数不是 0,就说明文件发生损坏。当然,如果余数是 0,也不能肯定文件没有损坏。

这种验证算法,是数据损坏校验,而不是数据没有损坏的校验。

🍀(5)databases

在这里插入图片描述

databases 部分是 RDB 文件中最重要的数据部分,其可以包含任意多个非空数据库。而每个 database 又是由三部分构成:

  • SODB:是一个常量,占 1 个字节,用于标识一个数据库的开始。
  • db_number:数据库编号。
  • key_value_pairs:当前数据库中的键值对数据。

在这里插入图片描述
每个 key_value_pairs 又由很多个用于描述键值对的数据构成。

  • VALUE_TYPE:是一个常量,占 1 个字节,用于标识该键值对中 value 的类型。
  • EXPIRETIME_UNIT:是一个常量,占 1 个字节,用于标识过期时间的单位是秒还是毫秒。
  • time:当前 key-value 的过期时间。

4️⃣RDB 持久化过程

在这里插入图片描述

对于 Redis 默认的 RDB 持久化,在进行 bgsave 持久化时,redis-server 进程会 fork 出一个 bgsave 子进程,由该子进程以异步方式负责完成持久化。而在持久化过程中,redis-server 进程不会阻塞,其会继续接收并处理用户的读写请求。

bgsave 子进程的详细工作原理如下:

由于子进程可以继承父进程的所有资源,且父进程不能拒绝子进程的继承权。所以, bgsave 子进程有权读取到 redis-server 进程写入到内存中的用户数据,使得将内存数据持久化到 dump.rdb 成为可能。

bgsave 子进程在持久化时首先会将内存中的全量数据 copy 到磁盘中的一个 RDB 临时文件,copy 结束后,再将该文件 rename 为 dump.rdb,替换掉原来的同名文件。

在这里插入图片描述

不过,在进行持久化过程中,如果 redis-server 进程接收到了用户写请求,则系统会将内存中发生数据修改的物理块 copy 出一个副本。等内存中的全量数据 copy 结束后,会再将副本中的数据 copy 到 RDB 临时文件。这个副本的生成是由于 Linux 系统的写时复制技术(Copy-On-Write)实现的。

写时复制技术是 Linux 系统的一种进程管理技术。

原本在 Unix 系统中,当一个主进程通过 fork()系统调用创建子进程后,内核进程会复制主进程的整个内存空间中的数据,然后分配给子进程。这种方式存在的问题有以下几点:

  • 这个过程非常耗时
  • 这个过程降低了系统性能
  • 如果主进程修改了其内存数据,子进程副本中的数据是没有修改的。即出现了数据冗余,而冗余数据最大的问题是数据一致性无法保证。

现代的 Linux 则采用了更为有效的方式:写时复制。子进程会继承父进程的所有资源,其中就包括主进程的内存空间。即子进程与父进程共享内存。只要内存被共享,那么该内存就是只读的(写保护的)。而写时复制则是在任何一方需要写入数据到共享内存时都会出现异常,此时内核进程就会将需要写入的数据 copy 出一个副本写入到另外一块非共享内存区域。

三、AOF 持久化

AOF,Append Only File,是指 Redis 将每一次的写操作都以日志的形式记录到一个 AOF 文件中的持久化技术。当需要恢复内存数据时,将这些写操作重新执行一次,便会恢复到之前的内存数据状态。

1️⃣AOF 基础配置

🍀(1)AOF 的开启

在这里插入图片描述

默认情况下 AOF 持久化是没有开启的,通过修改配置文件中的 appendonly 属性为 yes 可以开启。

🍀(2)文件名配置

在这里插入图片描述

Redis 7 在这里发生了重大变化。原来只有一个 appendonly.aof 文件,现在具有了三类多个文件:

  • 基本文件:可以是 RDF 格式也可以是 AOF 格式。其存放的内容是由 RDB 转为 AOF 当时内存的快照数据。该文件可以有多个。
  • 增量文件:以操作日志形式记录转为 AOF 后的写入操作。该文件可以有多个。
  • 清单文件:用于维护 AOF 文件的创建顺序,保障激活时的应用顺序。该文件只有一个。

🍀(3)混合式持久化开启

在这里插入图片描述

对于基本文件可以是 RDF 格式也可以是 AOF 格式。通过 aof-use-rdb-preamble 属性可以选择。其默认值为 yes,即默认 AOF 持久化的基本文件为 rdb 格式文件,也就是默认采用混合式持久化。

🍀(4)AOF 文件目录配置

在这里插入图片描述

为了方便管理,可以专门为 AOF 持久化文件指定存放目录。目录名由 appenddirname属性指定,存放在 redis.conf 配置文件的 dir 属性指定的目录,默认为 Redis 安装目录。

2️⃣AOF 文件格式

AOF 文件包含三类文件:基本文件、增量文件与清单文件。其中基本文件一般为 rdb 格式,在前面已经研究过了。下面就来看一下增量文件与清单文件的内容格式。

🍀(1)Redis 协议

增量文件扩展名为.aof,采用 AOF 格式。AOF 格式其实就是 Redis 通讯协议格式,AOF 持久化文件的本质就是基于 Redis 通讯协议的文本,将命令以纯文本的方式写入到文件中。

Redis 协议规定,Redis 文本是以行来划分,每行以\r\n 行结束。每一行都有一个消息头,以表示消息类型。消息头由六种不同的符号表示,其意义如下:

  • (+) 表示一个正确的状态信息
  • (-) 表示一个错误信息
  • (*) 表示消息体总共有多少行,不包括当前行
  • ($) 表示下一行消息数据的长度,不包括换行符长度\r\n
  • (空) 表示一个消息数据
  • (😃 表示返回一个数值

🍀(2)查看 AOF 文件

打开 appendonly.aof.1.incr.aof 文件,可以看到如下格式内容。

在这里插入图片描述

以上内容中框起来的是三条命令。一条数据库切换命令 SELECT 0,两条 set 命令。它们的意义如下:

  • *2 – 表示当前命令包含 2 个参数
  • $6 – 表示第 1 个参数包含 6 个字符
  • SELECT – 第 1 个参数
  • $1 – 表示第 2 个参数包含 1 个字符
  • 0 – 第 2 个参数
  • *3 --表示当前命令包含 3 个参数 $3 – 表示第 1 个参数包含 3 个字符
  • set – 第 1 个参数
  • $3 – 表示第 2 个参数包含 3 个字符 k11 – 第 2 个参数
  • $3 – 表示第 3 个参数包含 2 个字符 v11 – 第 3 个参数

🍀(3)清单文件

打开清单文件 appendonly.aof.manifest,查看其内容如下:

在这里插入图片描述

该文件首先会按照 seq 序号列举出所有基本文件,基本文件 type 类型为b,然后再按照 seq 序号再列举出所有增量文件,增量文件 type 类型为 i。

对于 Redis 启动时的数据恢复,也会按照该文件由上到下依次加载它们中的数据。

3️⃣Rewrite 机制

随着使用时间的推移,AOF 文件会越来越大。为了防止 AOF 文件由于太大而占用大量的磁盘空间,降低性能,Redis 引入了 Rewrite 机制来对 AOF 文件进行压缩。

🍀(1)何为 rewrite

所谓 Rewrite 其实就是对 AOF 文件进行重写整理。当 Rewrite 开启后,主进程 redis-server 创建出一个子进程 bgrewriteaof,由该子进程完成 rewrite 过程。其首先对现有 aof 文件进行 rewrite 计算,将计算结果写入到一个临时文件,写入完毕后,再 rename 该临时文件为原 aof 文件名,覆盖原有文件。

🍀(2)rewrite 计算

rewrite 计算也称为 rewrite 策略。rewrite 计算遵循以下策略:

  • 读操作命令不写入文件
  • 无效命令不写入文件
  • 过期数据不写入文件
  • 多条命令合并写入文件

🍀(3)手动开启 rewrite

Rewrite 过程的执行有两种方式。一种是通过 bgrewriteaof 命令手动开启,一种是通过设置条件自动开启。

以下是手动开启方式:

在这里插入图片描述

该命令会使主进程 redis-server 创建出一个子进程 bgrewriteaof,由该子进程完成 rewrite 过程。而在 rewrite 期间,redis-server 仍是可以对外提供读写服务的。

🍀(4)自动开启 rewrite

手动方式需要人办干预,所以一般采用自动方式。由于 Rewrite 过程是一个计算过程,需要消耗大量系统资源,会降低系统性能。所以,Rewrite 过程并不是随时随地任意开启的,而是通过设置一些条件,当满足条件后才会启动,以降低对性能的影响。

下面是配置文件中对于 Rewrite 自动启动条件的设置。

在这里插入图片描述

  • auto-aof-rewrite-percentage:开启 rewrite 的增大比例,默认 100%。指定为 0,表示禁用自动rewrite。
  • auto-aof-rewrite-min-size:开启 rewrite 的 AOF 文件最小值,默认 64M。该值的设置主要是为了防止小 AOF 文件被 rewrite,从而导致性能下降。

自动重写 AOF 文件。当 AOF 日志文件大小增长到指定的百分比时,Redis 主进程 redis-server 会 fork 出一个子进程 bgrewriteaof 来完成 rewrite 过程。其工作原理如下:Redis 会记住最新 rewrite 后的 AOF 文件大小作为基本大小,如果从主机启动后就没有发生过重写,则基本大小就使用启动时 AOF 的大小。

如果当前 AOF 文件大于基本大小的配置文件中指定的百分比阈值,且当前 AOF 文件大于配置文件中指定的最小阈值,则会触发 rewrite。

4️⃣AOF 优化配置

🍀(1)appendfsync

在这里插入图片描述

当客户端提交写操作命令后,该命令就会写入到 aof_buf 中,而 aof_buf 中的数据持久化到磁盘 AOF 文件的过程称为数据同步。

何时将 aof_buf 中的数据同步到 AOF 文件?采用不同的数据同步策略,同时的时机是不同的,有三种策略:

  • always:写操作命令写入 aof_buf 后会立即调用 fsync()系统函数,将其追加到 AOF文件。该策略效率较低,但相对比较安全,不会丢失太多数据。最多就是刚刚执行过的写操作在尚未同步时出现宕机或重启,将这一操作丢失。
  • no:写操作命令写入 aof_buf 后什么也不做,不会调用 fsync()函数。而将 aof_buf中的数据同步磁盘的操作由操作系统负责。Linux 系统默认同步周期为 30 秒。效率较高。
  • everysec:默认策略。写操作命令写入 aof_buf 后并不直接调用 fsync(),而是每秒调用一次fsync()系统函数来完成同步。该策略兼顾到了性能与安全,是一种折中方案。

🍀(2)no-appendfsync-on-rewrite

在这里插入图片描述

该属性用于指定,当 AOF fsync 策略设置为 always 或 everysec,当主进程创建了子进程正在执行 bgsave 或 bgrewriteaof 时,主进程是否不调用 fsync()来做数据同步。设置为 no,双重否定即肯定,主进程会调用 fsync()做同步。而 yes 则不会调用 fsync()做数据同步。 如果调用 fsync(),在需要同步的数据量非常大时,会阻塞主进程对外提供服务,即会存在延迟问题。如果不调用 fsync(),则 AOF fsync 策略相当于设置为了 no,可能会存在 30 秒数据丢失的风险。

🍀(3)aof-rewrite-incremental-fsync

在这里插入图片描述

当 bgrewriteaof 在执行过程也是先将 rewrite 计算的结果写入到了 aof_rewrite_buf 缓存中,然后当缓存中数据达到一定量后就会调用 fsync()进行刷盘操作,即数据同步,将数据写入到临时文件。该属性用于控制 fsync()每次刷盘的数据量最大不超过 4MB。这样可以避免由于单次刷盘量过大而引发长时间阻塞。

🍀(4)aof-load-truncated

在这里插入图片描述

在进行 AOF 持久化过程中可能会出现系统突然宕机的情况,此时写入到 AOF 文件中的最后一条数据可能会不完整。当主机启动后,Redis 在 AOF 文件不完整的情况下是否可以启动,取决于属性 aof-load-truncated 的设置。其值为:

  • yes:AOF 文件最后不完整的数据直接从 AOF 文件中截断删除,不影响 Redis 的启动。
  • no:AOF 文件最后不完整的数据不可以被截断删除,Redis 无法启动。

🍀(5)aof-timestamp-enabeld

在这里插入图片描述

该属性设置为 yes 则会开启在 AOF 文件中增加时间戳的显示功能,可方便按照时间对数据进行恢复。但该方式可能会与 AOF 解析器不兼容,所以默认值为 no,不开启。

5️⃣AOF 持久化过程

在这里插入图片描述

AOF 详细的持久化过程如下:

    1. Redis 接收到的写操作命令并不是直接追加到磁盘的 AOF 文件的,而是将每一条写命令按照 redis 通讯协议格式暂时添加到
      AOF 缓冲区 aof_buf。
    1. 根据设置的数据同步策略,当同步条件满足时,再将缓冲区中的数据一次性写入磁盘的AOF 文件,以减少磁盘 IO 次数,提高性能。
    1. 当磁盘的 AOF 文件大小达到了 rewrite 条件时,redis-server 主进程会 fork 出一个子进程bgrewriteaof,由该子进程完成 rewrite 过程。
    1. 子进程 bgrewriteaof 首先对该磁盘 AOF 文件进行 rewrite计算,将计算结果写入到一个临时文件,全部写入完毕后,再 rename 该临时文件为磁盘文件的原名称,覆盖原文件。
    1. 如果在 rewrite 过程中又有写操作命令追加,那么这些数据会暂时写入 aof_rewrite_buf 缓冲区。等将全部rewrite 计算结果写入临时文件后,会先将 aof_rewrite_buf 缓冲区中的数据写入临时文件,然后再 rename为磁盘文件的原名称,覆盖原文件。

四、RDB 与 AOF 对比

1️⃣RDB 优势与不足

🍀(1)RDB 优势

  • RDB 文件较小
  • 数据恢复较快

🍀(2)RDB 不足

  • 数据安全性较差
  • 写时复制会降低性能
  • RDB 文件可读性较差

2️⃣AOF 优势与不足

🍀(1)AOF 优势

  • 数据安全性高
  • AOF 文件可读性强

🍀(2)AOF 不足

  • AOF 文件较大
  • 写操作会影响性能
  • 数据恢复较慢

五、持久化技术选型

  • 官方推荐使用 RDB 与 AOF 混合式持久化。
  • 若对数据安全性要求不高,则推荐使用纯 RDB 持久化方式。
  • 不推荐使用纯 AOF 持久化方式。
  • 若 Redis 仅用于缓存,则无需使用任何持久化技术。

后记

在这里插入图片描述

👉Java全栈学习路线可参考:【Java全栈学习路线】最全的Java学习路线及知识清单,Java自学方向指引,内含最全Java全栈学习技术清单~
👉算法刷题路线可参考:算法刷题路线总结与相关资料分享,内含最详尽的算法刷题路线指南及相关资料分享~

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

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

相关文章

台灯护眼灯哪个牌子好用?真正适合学生使用的护眼台灯

最近家里一款陪伴了多年的灯泡的台灯因为年久失修已经损坏了,导致不得不换个台灯,而换台灯就不得不仔细挑选,毕竟是需要长期使用的,对视力方面影响还是很大的,通常老式台灯的光照明显对视力都产生不了太大保护&#xf…

AI可以实现陪伴需求吗

在现代社会,科技日新月异,个性化AI定制服务已经成为一种新型的科技应用,被越来越多的人所接受和使用。个性化AI定制是一种基于人工智能技术的个性化服务,它可以帮助我们更好地规划生活,为我们提供情感上的陪伴和生活上…

Go 1.21新特性前瞻

Go 1.21版本[1]正在如火如荼地开发当中,按照Go核心团队的一年两次的发布节奏来算,Go 1.21版本预计将在2023年8月发布(Go 1.20版本[2]是在2023年2月份发布的)。 本文将和大家一起看看Go 1.21都会带来哪些新特性。不过由于目前为时尚早,下面列出…

AI绘图实战(七):室内设计线稿渲染、景观设计手绘稿改动、建筑照片转线稿|Stable Diffusion成为设计师生产力工具

S:AI能取代设计师么? I :至少在设计行业,目前AI扮演的主要角色还是超级工具,要顶替?除非甲方对设计效果无所畏惧~~ 预先学习: 安装及其问题解决参考:《Windows安装Stable Diffusion …

03.DolphinScheduler资源中心

文章目录 文件管理基础操作创建文件上传文件文件查看下载文件文件重命名删除文件 任务样例创建 shell 文件创建工作流执行文件查看结果 UDF管理函数管理任务样例编写 UDF 函数配置 UDF 函数使用 UDF 函数 任务组管理任务组配置新建任务组查看任务组队列任务组的使用 任务组的实…

【刷题】Java日常刷题1

A.Sort the Subarray 题意:给出一个数组,一个在此基础上被操作过的数组,找出被操作过的最长的非递减连续序列。 题解:这道题最开始写就被给的样例迷惑了,给出的样例都是被操作过出现非递减序列的片段,因此…

No.049<软考>《(高项)备考大全》【冲刺3】《软考之 119个工具 (1)》

《软考之 119个工具 (2)》 1.专家判断2.引导技术:3.项目管理信息系统:4.会议:5.分析技术:6.变更控制工具:7.访谈:8.焦点小组会议:9.引导式研讨会:10.群体创新技术:11.群体决策技术:12.问卷调查:13.观察:14.原型法:15.标杆对照:16.系统交互图:17.文件分析…

Django基于大数据的应届生求职系统

背景 科学技术日新月异的如今,计算机在生活各个领域都占有重要的作用,尤其在信息管理方面,在这样的大背景下,学习计算机知识不仅仅是为了掌握一种技能,更重要的是能够让它真正地使用到实践中去,以创新的视…

又是DNA甲基化,孕期母亲的压力会影响儿童健康

产前母亲的生活压力事件与后代神经发育不良相关联。研究人员表示,关联的生物学机制大部分是未知的,但在体内发生的一种化学反应——DNA甲基化,即一个小分子甲基被添加到DNA上——可能起着一定作用。这些发现可为了解胎儿环境如何可能影响神经…

【LeetCode】189. 轮转数组

题目链接:https://leetcode.cn/problems/rotate-array/ 📕题目要求: 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 尽可能想出更多的解决方案,至少有 三种 不同的方法可以…

MTC-PD65W1C-CTA1快充电源-使用MTC-650V Cascode D-GaN

本电源模块是65W单一C界面,其输出电压由协议IC可以控制5V/3A, 9V/3A, 15V/3A, 20V/3.25A等电压输出,使用QR/DCM反驰式电路架构于输出20V重载时可达93%效率及功率密度可达1.5W/cm3,本系统采用同系列控制单晶片:QR一次侧控制IC驱动M…

【云计算•云原生】3.一小时熟练掌握docker容器

文章目录 docker简介ubuntu下安装dockerkali下安装dockerdocker基本命令docker搭建mysql、nginx、redis容器/镜像打包搭建私有镜像仓库docker网络管理Dockerfile文件docker-compose.yml示例:搭建lamp docker简介 docker是一个开源的应用容器引擎,可以让…

软件著作权登记版权保护中心下发补正修改指南

本文为大家介绍常见版权中心下发的补正问题及对应修改方法。 一、补正是什么意思? 补正,即增补订正。 下发补正指版权保护中心发现软件著作权登记材料中存在一些格式/内容上的问题,予以驳回。要求著作权人或代理人依照补正意见内容对材料进…

电影《灌篮高手》观后

上周和同学一起看了电影《灌篮高手》这部电影,个人以前没有看过相关漫画和动画,但记得,看过海报和一些宣传物品,有的衣服上,有文具盒上,也都出现过,而且是在自己小时候,可见当时的影…

(中)苹果有开源,但又怎样呢?

上篇(详情请戳:《(上)苹果有开源,但又怎样呢? 》)里说到,苹果首个开源项目 Darwin 的诞生,与乔布斯的复仇归来有着千丝万缕的关系。 作为一个开源的操作系统&#xff0c…

【JAVA】将两个字符串相乘并返回字符串

🖊作者 : D. Star. 📘专栏 : Java 😆今日分享 : 越忙越不能熬夜. —晚安 , 好梦. 将两个字符串相乘并返回字符串 🌻前言:✔题目:🔎代码详情:1.创建字符创对象:2.将字符串转化为数字:3.数字相乘,并转化为字符串家人们,点…

[C++]——C++基础知识点(C++和C语言的区别)

文章目录 1. 前言2. 命名空间2.1 命名空间定义2.2 命名空间使用 3. C的输入输出4. 缺省参数4.1 缺省参数概念4.2 缺省参数分类 5. 函数重载5.1 函数重载概念5.2 C支持函数重载的原理——名字修饰 6. 引用6.1 引用概念6.2 引用特性6.3 常引用6.4 引用的使用场景6.5 引用和指针的…

招商基金数字化转型下的研发管理|ONES 客户案例

在 4 月 20 日举行的《中国企业软件研发管理白皮书》发布会上,招商基金信息技术部副总监、研发中心主管刘志昆作了《招商基金数字化转型下的研发管理》主题演讲,从数字化转型背景、研发管理所遇到的挑战出发,讲述招商基金如何摸索出适合自身环…

Pycharm连接MySQL

使用MySQL内置工具(命令) 创建数据库:unicom 数据表:admin 表名:admin 列:id 整型 自增 主键username 字符串 不为空,password 字符串 不为空,mobile 字符串 不为空 Python代码实…

echarts 象形柱图_矢量图_自定义样式

Echarts 常用各类图表模板配置 注意: 这里主要就是基于各类图表,更多的使用 Echarts 的各类配置项; 以下代码都可以复制到 Echarts 官网,直接预览; 图标模板目录 Echarts 常用各类图表模板配置一、象形柱图二、环形图…