Redis—持久化
持久化
在mysql
当中,有4个比较关心的特性,分别是原子性、一致性、隔离性和持久性。这里的持久性和持久化是一回事。我们该如何判断是否具有持久性呢?答案就是看重启进程或者主机之后,数据是否存在。当我们把数据存储在硬盘上是就是持久的,把数据存储在内存上,就是不持久的。
我们知道redis
的特点就是效率高,这是因为它是一个内存型数据库,是把数据存储在内存当中的,但是这样做不到持久性,想要持久性,就需要存储在硬盘上。因此redis
为了二者兼得,它在内存和硬盘上都存有数据,这样的两份数据,理论上是完全相同的,但是实际上可能存在一个小的概率差异,这取决于我们具体怎么进行持久化。
例如,当要插入一个新的数据的时候,就需要把这个数据同时写入到内存和硬盘当中,当查询某个数据的时候,可以直接在内存中读取。而硬盘当中的数据只是在redis
重启的时候,用来恢复内存当中的数据,相当于备份了一份数据。这样做的代价就是消耗了更多的空间,一份数据存储了两遍,但是毕竟硬盘毕竟便宜,这样的开销并不会带来太多的成本。
Redis
进行持久化处理的时候,有两种方式,分别是RDB
和AOF
。
RDB(Redis DataBase)
:定期备份。定期同步内存和硬盘中的数据。AOF(Append Only File)
:实时备份。只要内存中的数据被修改,就立即同步到硬盘中。
接下来,我们就来学习这两种持久化方法。
RDB
RDB定期的把我们Redis
内存中的所有数据,都给写入硬盘当中,生成一个“快照”。“快照”就相当于某个案发现场,警察来了拉上警戒线,然后警察们开始拍照,记录现场,后续就可以根据这些照片,来还原出现场当时发生了什么。
而Redis
中的“快照”,就是给内存中当前存储的这些数据,赶紧拍个照片,生成一个文件,存在在硬盘当中,后续Redis
一旦重启了,就可以根据“快照”把内存中的数据给恢复回来。这里的“定期”具体来说,有两种方式。第一种是手动触发,程序员通过reids
客户端执行特定的命令,来触发快照生成,命令有如下两种:
save
:执行save
的时候,redis就会全力以赴的进行“快照生成”操作,此时就会阻塞redis
的其它客户端的命令,跟执行keys *
的后果一样。所以不建议使用save
。bgsave
:bg
就相当于background
,并不会影响redis
服务器处理其它客户端的请求和命令。原理就是redis使用的是“多线程”的方式,来完成并发编程。流程如下:
- 首先判定当前是否已经存在其他正在工作的子进程。比如说现在已经有了一个子进程正在执行
bgsave
,此时就直接把当前的bgsave
返回。 - 如果没有其他的工作子进程,就通过
fork
创建出一个子进程。fork 过程中⽗进程会阻塞,通过info stats
命令查看latest_fork_usec
选项,可以获取最近⼀次 fork 操作的耗时,单位为微秒。 - 子进程负责进行写文件,生成快照的过程。父进程继续接收客户端的请求,继续正常提供服务。
- 子进程完成整体的持久化过程之后,创建RDB文件,根据父进程内存生成临时快照文件,完成后对原有文件进行原子替换。
- 子进程发送信号给父进程表示干完了,,父进程就会更新一些统计信息,子进程就可以结束销毁了。
如果Redis
服务器中存储的数据特别多,内存消耗特别大,那么父进程创建子进程的时候,子进程要把父进程的所有数据拷贝一份,会不会有很大的性能开销呢?其实是很小的,fork
在进行内存拷贝的时候,不是直接把所有的数据都拷贝一遍,而是利用“写时拷贝”的机制来完成的。如果子进程里的这个内存数据和父进程的内存数据完全一样,此时就不会触发真正的拷贝动作,而是父子进程共用一份内存数据。
第二种就是自动触发,在Redis配置文件中,设置一下,让每隔多长时间或者每产生多少次修改就进行触发。
我们需要在打开redis
的配置文件,在root用户下运行vim /etc/redis/redis.conf
命令。
dir
后面的路径,就是redis
生成的RDB
文件存放的位置。在该目录下,会有dump.rdb
文件,这个就是生成的快照文件。这个文件是通过二进制存储数据的,如果直接打开会看到一些乱码。这个二进制的文件,会把内存中的数据以压缩的形式,保存到dump.rdb
文件中。虽然压缩 RDB 会消耗 CPU,但可以⼤幅降低文件的体积,⽅便保存到硬盘或通过网络发送到从节点,因此建议开启。
这个图片就显示了dump.rdb
文件多久更新一次。保存文件的格式是:
save <seconds> <changes>
也就是说只要在seconds
秒内达到了changes
次修改,那么就会更新文件,例如save 300 10
表示的是如果在300秒内修改了10次数据,那么会在300秒后进行更新。当然也可以修改这些数值,如果要修改的话,需要遵从基本的原则:生成一次rdb快照,这个成本是比较高的,不能让这个操作执行的太频繁。
RDB的优缺点
- RDB 是⼀个紧凑压缩的⼆进制文件,代表 Redis 在某个时间点上的数据快照。非常适⽤于备份,全量复制等场景。比如每 6 小时执行 bgsave 备份,并把 RDB 文件复制到远程机器或者文件系统中(如 hdfs)⽤于灾备。
- Redis 加载 RDB 恢复数据远远快于 AOF 的⽅式。
- RDB ⽅式数据没办法做到实时持久化 / 秒级持久化。因为 bgsave 每次运行都要执行 fork 创建⼦进程,属于重量级操作,频繁执行成本过高。
- RDB ⽂件使用特定⼆进制格式保存,Redis 版本演进过程中有多个 RDB 版本,兼容性可能有风险。
AOF
AOF
全称是append only file
,类似于mysql
的binlong
,会把用户的每个操作都记录到文件中。当开启aof
的时候,rdb
就不生效了,启动的时候不会再读取rdb
文件内容。
当redis
重新启动的时候,就会读取aof文件中的内容,用来恢复数据,aof
一般是关闭状态,可以通过修改配置文件来开启aof
。把appendonly
后的no
改成yes
就可以开启了。
修改完成后,要重启redis
服务端:
service redis-server restart
重启完成之后,向redis中插入元素。
然后打开appendonly.aof
文件。这个文件和dump.rdb
文件在一起,位置是/var/lib/redis
。
AOF
是一个文本文件,每次进行的操作,都会被记录到文本文件中,可以看到刚才的指令都在里面,这个文本文件通过一些特殊符号作为分隔符,来对命令的细节做出区分。
在AOF
模式下,又要写入内存,又要写入内存,那么会对性能有影响吗?实际上,并没有影响到redis
处理请求的速度。原因是:
- AOF机制并非是直接让工作线程把数据写入到硬盘中,而是先写入一个内存中的缓冲区,积累一波后,再统一写入到硬盘中。比如,有100个请求,100个请求的数据一次写入到硬盘中,比分100次,每次写入一个请求要快的多。
- 硬盘上读写数据,顺序读写的速度是比较快的(不过跟内存相比要慢的多)。随机访问的速度是比较慢的。
AOF
是每次把新的操作写入到原有文件的末尾,属于顺序读写。
AOF的工作流程
- 所有的写入命令会追加到
aof_buf(缓冲区)
中。 - AOF缓冲区根据对应的策略向硬盘做同步操作。
- 随着AOF文件越来越大,需要定期对AOF文件进行重写,达到压缩目的。
- 当redis服务器启动时,可以加载AOF文件进行数据恢复。
AOF 过程中为什么需要 aof_buf
这个缓冲区?Redis 使⽤单线程响应命令,如果每次写 AOF ⽂件都直接同步硬盘,性能从内存的读写变成 IO 读写,必然会下降。先写⼊缓冲区可以有效减少 IO 次数,同时,Redis 还可以提供多种缓冲区同步策略,让用户根据自己的需求做出合理的平衡。
文件同步
将缓冲区的数据写入到硬盘的文件中叫做文件同步,redis
给出了一些选项,让程序员可以根据实际情况来决定怎么选择缓冲区的刷新策略,如果刷新频率过高,性能影响就越大,同时数据的可靠性就越高;如果刷新频率越低,性能影响就越小,数据的可靠性就越低。因此Redis 提供了多种 AOF 缓冲区同步⽂件策略,由参数 appendfsync 控制,
可配置值 | 说明 | 说明 |
---|---|---|
always | 命令写入aof_buf 后调用fsync 同步,完成后返回 | 频率最高,数据可靠性最高,性能最低。 |
everysec | 命令写入aof_buf 后只执行write 操作,不进行fsync 。每秒由同步线程进行fsync 。 | 频率低一些,数据可靠性也会降低,性能会提高。 |
no | 命令写入aof_buf 后只执行write操作,由OS控制fsync 频率。 | 频率最低,数据可靠性最低,性能最高。 |
系统调用write和fsync说明:
write
操作会触发延迟写机制。Linux在内核提供页缓冲区用来提供硬盘IO性能。write
操作在写入系统缓冲区后立即返回。同步硬盘操作依耐于系统调度机制,例如:缓冲区页空间写满或达到特定时间周期。同步文件之前,如果此时系统故障宕机,缓冲区内数据将丢失。- fsync针对单个文件操作,做强制硬盘同步,fsync将阻塞直到数据写入到硬盘。
- 配置为 always 时,每次写⼊都要同步 AOF 文件,性能很差,在⼀般的 SATA 硬盘上,只能⽀持⼤约几百 TPS 写⼊。除非是非常重要的数据,否则不建议配置。
- 配置为 no 时,由于操作系统同步策略不可控,虽然提高了性能,但数据丢失风险⼤增,除非数据重要程度很低,⼀般不建议配置。
- 配置为 everysec,是默认配置,也是推荐配置,兼顾了数据安全性和性能。理论上最多丢失 1 秒的数据。
当AOF文件持续增长,体积会越来越大,会影响到redis
下次启动的时间,因为redis
启动的时候要读取AOF
文件的内容,AOF文件记录了中间的过程,但是实际上redis在重新启动的时候只是关注最终结果。因此redis
就存在一个机制,能够针对aof
文件进行整理操作,这个整理就是能够去除其中的冗余操作,并且合并一些操作,达到给aof文件“瘦身”的效果。
重写机制
随着命令不断写入 AOF,⽂件会越来越大,为了解决这个问题,Redis 引入 AOF 重写机制压缩文件体积。AOF 文件重写是把 Redis 进程内的数据转化为写命令同步到新的 AOF ⽂件。比如有如下操作:
set key 111
set key 222
set key 333
set key 444
每一次的set操作都会覆盖上一次的value
,最后key
里面就只有444这个数据,前面的操作相当于无效,如果redis真把每次操作都记录下来,那么就会浪费很多的空间,这个例子就相当于浪费了3/4
的空间。
因此,redis
才引入了重写机制,而重写后的文件体积变小,有如下原因:
- 进程内已超时的数据不再写入文件。
- 旧的AOF中的无效命令,例如
del,hdel,srem
等重写后将会删除,只需要保留数据的最终版本。 - 多条写操作合并为一条,例如
lpush list a、lpush list b、lpush list c
可以合并为lpush list a b c
。
重写之后的AOF文件一方面降低了硬盘空间占用,一方面可以提升启动Redis
时数据恢复的速度。AOF 重写过程可以分为⼿动触发和⾃动触发:
- 手动触发:调用
bgrewriteaof
命令。 - 自动触发:根据
auto-aof-rewrite-min-size
和auto-aof-rewrite-percentage
参数确定自动触发时机。auto-aof-rewrite-min-size
,表示触发重写时 AOF 的最小文件大小,默认为 64MB。auto-aof-rewrite-percentage
,代表当前 AOF 占⽤大小相比较上次重写时增加的⽐例。
重写流程如下:
- 执行AOF重写请求。
如果当前进程正在执行AOF重写,请求不执行。如果当前进程正在执行bgsave
操作,重写命令延迟到bgsave
完成之后再执行。 - 父进程执行 fork 创建子进程。
- 重写。
1)主进程 fork 之后,继续响应其他命令。所有修改操作写入 AOF 缓冲区并根据 appendfsync 策略同步到硬盘,保证旧 AOF 文件机制正确。
2)子进程只有 fork 之前的所有内存信息,fork
之后,新来的请求对内存造成的修改,子进程是不知道的,此时,父进程这里又准备了一个aof_rewrite_buf
缓冲区,专门放fork
之后收到的数据。子进程这边,把aof
数据写完之后,会通过信号通知父进程,父进程再把aof_rewrite_buf
缓冲区中的内容也写入到新AOF文件中,这样就可以用新的AOF
文件代替旧的AOF文件了。 - 子进程根据内存快照,将命令合并到新的 AOF 文件中。
- 子进程完成重写。
1)新文件写入后,子进程发送信号给父进程。
2)父进程把AOF重写缓冲区内临时保存的命令追加到新AOF文件中。
3)用新AOF文件替换老AOF文件。
混合持久化
当redis启动时,会根据RDB
和AOF
文件中的内容,进行数据恢复。
为什么要实现混合持久化的方式呢?因为AOF是按照文本文件的方式来写入文件的,但是文本的方式写入文件,后续加载的成本是比较高的,所以才引入了“混合持久化”的方式,结合了rdb
和aof
的特点。这个方式需要在配置文件中开启,修改完之后,需要重启服务器。
按照aof
的方式,每一个请求操作,都会被记录到文件中,在触发aof
重写之后,就会把当前内存的状态按照rdb
的二进制格式写入到新的aof
文件中,后续再进行的操作,仍然是按照aof
文本的方式追加到文件后面。同时存在rdb
快照和aof
文件的时候,是以aof
为主,rdb
会被直接忽略。
相关文章:
Redis—持久化
持久化 在mysql当中,有4个比较关心的特性,分别是原子性、一致性、隔离性和持久性。这里的持久性和持久化是一回事。我们该如何判断是否具有持久性呢?答案就是看重启进程或者主机之后,数据是否存在。当我们把数据存储在硬盘上是就…...
Spring Boot中日志管理与异常处理
以下是Spring Boot中日志管理与异常处理的系统化实践指南,结合最佳实践与核心配置,确保应用健壮性与可维护性。 📊 一、日志管理核心配置 默认框架与级别控制 Logback 是Spring Boot默认日志框架,通过application.yml快速配置&…...
基于MATLAB的BP神经网络的心电图分类方法应用
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 心电图(ECG)是临床诊断心血管疾病的重要工具,能够反映心脏电活动的周期性变化。…...
【笔记】Docker 配置阿里云镜像加速(公共地址即开即用,无需手动创建实例)
2025年06月25日记 【好用但慎用】Windows 系统中将所有 WSL 发行版从 C 盘迁移到 非系统 盘的完整笔记(附 异常处理)-CSDN博客 【笔记】解决 WSL 迁移后 Docker 出现 “starting services: initializing Docker API Proxy: setting up docker ap” 问题…...
Java 中LinkedList 总结
406.根据身高重建队列 力扣题目链接(opens new window) 假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。每个 people[i] [hi, ki] 表示第 i 个人的身高为 hi ,前面 正好 有 ki 个身高…...
微信小程序 / UNIAPP --- 阻止小程序返回(顶部导航栏返回、左 / 右滑手势、安卓物理返回键和调用 navigateBack 接口)
目录 理解page-container的原理 设置禁止点击遮盖层关闭? 阻止左滑返回 理解page-container的原理 page-container组件的所有属性,最重要的是show值。在页面上引入这个组件后,若show值为true,页面上所有各种方式触发的返回操作…...
Linux基本指令篇 —— mv指令
在Windows中我们经常使用CtrlX和CtrlV将一个地方的文件或目录移动到另一个地方,我们若是要在Linux当中完成此操作,则需要使用mv指令。mv 是 Linux 系统中用于移动或重命名文件和目录的基本命令之一,是 "move" 的缩写。下面将详细介…...
基于STM32的智能节能风扇的设计
基于STM32的智能节能风扇的设计 内容:1.摘要 本设计旨在解决传统风扇能耗高、功能单一的问题,提出一种基于STM32的智能节能风扇。通过结合温度传感器、人体红外传感器等多种传感器,利用STM32微控制器实现对风扇的智能控制。经过实际测试,该智…...
HCIA-IP路由基础
前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 本篇笔记是根据B站上的视频教程整理而成,感谢UP主的精彩讲解!如果需要了解更多细节,可以参考以下视频…...
Linux 内存管理之page cache
文章目录 一、page cache1.1 File-backed pages和Anonymous pages1.2 page cache/slab cache1.3 读/写路径1.4 脏页回写1.5 drop_caches1.6 时间局部性与空间局部性1.7 Page Cache 的两种类型1.8 关键数据结构 二、Page Cache 的产生2.1 Buffered I/O(标准 I/O&…...
uniApp实战四:网络请求封装
文章目录 1.最终效果预览2.请求封装3.创建config配置文件4.创建api请求5.页面调用 说明:当前笔记基于Vue3开发,HbuilderX版本4.66 1.最终效果预览 2.请求封装 在util/request.js下创建js文件,代码如下 import config from /configconst tim…...
sentinel 自定义 dashboard 用户名密码
默认情况下,sentinel dashboard 用户名密码为 sentinel / sentinel ,这里我使用重写 镜像的方式: // 定义 Dockerfile $ cat Dockerfile # 基于现有 Sentinel Dashboard 镜像 FROM bladex/sentinel-dashboard:1.8.4# 重新定义 ENTRYPOINT&…...
Fisco Bcos学习 - 搭建星形拓扑组网
文章目录 一、前言二、环境准备与依赖安装2.1 系统要求2.2 依赖安装 三、星形拓扑设计与节点规划四、使用build_chain.sh构建星形拓扑4.1 创建操作目录并获取脚本4.2 生成星形拓扑配置文件4.3 执行构建命令4.4 查看生成的节点文件 五、启动节点与共识验证5.1 启动所有节点5.2 查…...
深度学习入门--(二)感知机
一.感知机是什么 简单的输入和输出,感觉(输入),知道(输出,作出反应) 二.简单逻辑电路 2.1与门 import numpy as np #AND def AND(X1,X2):w1,w2,thera0.5,0.5,0.7tmpX1*w1X2*w2if tmp>the…...
LeetCode 3298.统计重新排列后包含另一个字符串的子字符串数目2
给你两个字符串 word1 和 word2 。 如果一个字符串 x 重新排列后,word2 是重排字符串的 前缀 ,那么我们称字符串 x 是 合法的 。 请你返回 word1 中 合法 子字符串 的数目。 注意 ,这个问题中的内存限制比其他题目要 小 ,所以你…...
【nRF52832】【环境搭建 1】【ubuntu下搭建nRF52832开发环境】
本文讲述如何在 ubuntu 22.04 下开发 nRF52832. host 环境说明: $ uname -a Linux leo 6.8.0-60-generic #63~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Tue Apr 22 19:00:15 UTC 2 x86_64 x86_64 x86_64 GNU/Linux1. 安装软件 sudo apt install gcc-arm-none-eabisudo apt-get i…...
Django
1. Django 和 Tornado 的关系 Django 是一个高级 Python Web 框架,它鼓励快速开发和干净、实用的设计。Django 遵循 MVC(模型-视图-控制器)设计模式的一个变种,称为 MTV(模型-模板-视图)。Django 框架提供…...
51c嵌入式~CAN~合集2
我自己的原文哦~ https://blog.51cto.com/whaosoft/14016935 一、CAN总线常见信号干扰问题 定位干扰原因 当总线有干扰时,有经验的工程师能够迅速定位,但是对于新手来说却很麻烦。 造成总线干扰的原因有很多,比如通过电磁辐射耦合到通…...
【iOS】iOS崩溃总结
【iOS】iOS崩溃总结 一、前言 之前写了一篇博文《【Flutter】程序报错导致的灰屏总结》,浏览量、收藏率和点赞量还挺高,还被收录了,就想着总结一下iOS崩溃,这个也是在iOS面试中经常被问到的。 在 iOS 开发过程中,导致…...
npm 报错:“无法加载文件 ...npm.ps1,因为在此系统上禁止运行脚本” 解决方案(附执行策略说明)
在使用 npm 命令时,部分 Windows 用户可能会遇到如下错误: npm : 无法加载文件 D:\nvm4w\nodejs\npm.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https://go.microsoft.com/fwlink/?LinkID135170 中的 about_Executi…...
AES加密:为你的PDF文档加上一道钢铁防线
在数字化时代,确保敏感数据的安全性至关重要。加密技术在保护信息免受未经授权访问方面起着关键作用。而在众多加密标准中,AES(高级加密标准)因其强大的安全性和广泛的应用而脱颖而出。那么,AES加密如何应用到PDF文档中…...
2025学年湖北省职业院校技能大赛 “信息安全管理与评估”赛项 样题卷(一)
2025学年湖北省职业院校技能大赛 “信息安全管理与评估”赛项 样题卷(一) 第一部分:网络平台搭建与设备安全防护任务书DCRS:DCFW:DCWS:WAF: 第二部分:网络安全事件响应、数字取证调查、应用程序安全任务书任务 1:应急响…...
1688商品发布API:自动化上架与信息同步
一、1688商品发布API的核心功能与技术架构 1.1 API功能全景 1688商品发布API是1688开放平台的核心组件之一,支持商品信息的自动化发布、编辑、上下架及库存同步。其核心功能包括: 商品信息管理:支持商品标题、描述、价格、库存、SKU&#…...
鸿蒙ArkUI---基础组件Tabs(Tabbar)
基础页面组件 Tabs 作用: 快速创建Tabbar 个人理解: 快速的创建Tabar。 效果图: 代码:interface TabItem {icon: Resource; //未选中activeIcon: Resource; //选中name: string; //文字 }Entry Component struct Index {// st…...
50. Pow(x, n)快速幂算法
实现 pow(x, n) ,即计算 x 的整数 n 次幂函数(即,xn )。此函数应将 x 作为浮点数(意味着它可以是十进制数)和 n 作为整数(可以是正数、负数或零)一起使用。 快速幂(Expo…...
Python函数
三.函数进阶 0.定义 函数三要素:函数名,参数,返回值,其中只有函数名是必须要的,参数,返回值可以没有 语法: def 函数名(参数): 函数体 return 返回值 1.…...
7.Spring框架
# spring框架Spring3.0开启了纯注解开发模式,使用Java类替代配置文件,开启了Spring快速开发赛道## 为什么要使用 **Spring** 框架? Spring 是一个轻量级应用框架,它提供了 IoC 和 AOP 这两个核心的功能。它的核心目的是为了…...
计算机网络-----详解HTTP协议
✏️1. 什么是HTTP HTTP (全称为 “超⽂本传输协议”) 是⼀种应⽤⾮常⼴泛的应⽤层协议(所谓 “超⽂本” 的含义, 就是传输的内容不仅仅是⽂本(⽐如 html, css 这个就是⽂本), 还可以是⼀些其他的资源, ⽐如图⽚, 视频, ⾳频等⼆进制的数据)。 HTTP 诞⽣…...
解决npm安装依赖报错ERESOLVE unable to resolve dependency tree
在使用 npm 安装项目依赖时,有时会遇到错误信息 “npm ERR! code ERESOLVE”,该错误通常发生在依赖版本冲突或者依赖解析问题时。本文将详细介绍出现这个错误的原因,并提供解决方法,确保正确安装项目依赖并避免该错误的发生。 一…...
微信小程序安卓手机输入框文字飘出输入框
最近在开发微信小程序遇到一个问题,安卓手机输入框文字飘出输入框,但是ios系统的手机则正常。 使用情景:做了一个弹窗,弹窗内是表单,需要填写一些信息,但是在填写信息时光标不显示,输入的内容飘…...
python网络自动化-数据格式与数据建模语言
数据格式 在Python网络运维自动化最基本是JSON、YAML和XML这3种数据格式。除了这3种常用的数据格式,还有一种深受网络工程师喜爱且在网络运维自动化中常用的数据承载方式——表格 需要注意的是JSON的键必须用双引号包裹,JSON的对象数据键值对的值和数组…...
C++ 中的 atan2 函数:深入解析与应用
在 C 编程中,数学计算是许多应用场景的核心,例如几何问题、物理模拟和游戏开发等。atan2 函数作为数学库中的一个重要工具,提供了比普通反正切函数更强大的功能。本文将深入解析 atan2 函数的原理、使用方法以及实际应用场景,并通…...
云计算-Azure Functions :构建事件驱动的云原生应用报告
云计算导论 课程研究报告 Azure Functions :构建事件驱动的云原生应用 摘要: Azure Functions 是一种无服务器解决方案,是由微软 Azure 平台提供的,可以使用户专注于业务逻辑,减少代码的编写,减少需要维护…...
【笔记——李沐动手学深度学习】2.3 线性代数
2.3.1 标量 标量由只有一个元素的张量表示。 下面的代码将实例化两个标量,并执行一些熟悉的算术运算,即加法、减、乘法、除法和指数。 2.3.2 向量 人们通过一维张量表示向量。一般来说,张量可以具有任意长度,取决于机器的内存限…...
多个 Job 并发运行时共享配置文件导致上下文污染,固化 Jenkins Job 上下文
基于 context.py 固化 Jenkins Job 上下文的完整方案,适用于你当前的工作流(Python Jenkins Pipeline),解决: 多个 Job 并发运行时共享配置文件导致上下文污染;读取环境变量或 JSON 文件时被其他 Job 修改…...
github 上的php项目
github 上的php项目 项目的网址 (Loong1996/LikeGirlSite: 情侣网站、情侣网页、恋爱记录网站) # 修改 # admin/Config_DB.php//localhost 为数据库地址 一般使用默认的即可 或(127.0.0.1) $db_address "mysql_php";/…...
防火墙快速管理软件,66K超小巧
软件介绍 今天为大家推荐一款轻量级的Windows防火墙管理工具,这款工具能帮助用户快速开启或关闭系统防火墙功能,操作比系统原生设置更加便捷高效。 软件优势 相比通过系统设置层层点击的操作方式,这款仅66KB大小的微型工具只需单击按钮…...
入门级STM32F103C8T6无人机遥控(原理图)
一、STM32主控电路 一、STM32 主控电路 把 STM32 想象成 “机器人的大脑”,核心电路是 “大脑的基础保障”:让大脑有电、有心跳(时钟 )、能复活(复位 )。 1. 电源引脚(VDD、VDDA、VSS 等 &#…...
无人机灯光驱动模块技术解析
一、运行方式 1. 核心流程: 指令接收:灯光控制模块通过无线通信链路(如WiFi, 数传电台,或专用的表演控制链路)接收来自地面站或中央控制系统的灯光指令。指令包含:颜色(RGB/RGBW值࿰…...
React + Umi(Umijs/Max) 搭建项目及配置
文章标题 01 环境准备02 快速构建2.1 参数选项2.2 umix 还是 umijs/max2.3 使用 pnpm (推荐)2.4 使用 npm 和 yarn2.5 启动项目2.6 启用 Prettier(可选)2.7 打包部署发布 03 Tailwind CSS 插件(可选)3.1 安…...
React 第六十四节Router中HashRouter的使用详细介绍及案例分析
前言 HashRouter 是 React Router 提供的一种路由实现方案,它使用 URL 的 hash 部分(# 后面的内容)来实现客户端路由功能。 一、HashRouter 的核心用途 客户端路由:在不刷新页面的情况下管理应用导航兼容性:支持不支…...
Linux RDMA网络配置手册
一、配置前准备工作 在进行 RDMA 网络配置之前,请确保以下准备工作已完成: 硬件环境 确保服务器支持 RDMA 功能,例如支持 InfiniBand 或 RoCE(RDMA over Converged Ethernet)的网卡。确保网络交换设备支持 RDMA 协议…...
sentinel与seata组件在微服务中的基本作用
微服务基础内容: 在微服务中,首先学习了微服务的横向拆分与纵向拆分,纵向拆分指按照功能拆分模块,横向拆分指将高复用的模块单独拆分,使纵向拆分的模块去调用这部分内容。 学习了基本拆分后,需要知道微服…...
Springboot 集成多数据源pgSql+mysql,启动报错
一.错误信息: 2025-06-25 20:25:50.870 ERROR [ai-manage-center,,] --- [ruid-ConnectionPool-Create-1057240219] DruidDataSource : create connection SQLException, url: jdbc:postgresql://10.10.60.227:5432/ai_dify1?sslmodedisable¤tSchemapub…...
南宫28NG相信品牌力量/Vue 3 中的组合式 API(Composition API)进阶实战
南宫28NG相信品牌力量【罔丨止:MGTY.PW】 点击此处复制到浏览器打开 随着 Vue 3 的普及,Composition API 已成为现代 Vue 开发的主流。本节我们将深入掌握组合式 API 的进阶用法,涵盖响应式工具、生命周期钩子封装、自定义逻辑抽离等关键技术…...
实战使用 Docker Compose 搭建 Redis Cluster 集群
文章目录 前言技术积累Docker Compose简介Redis Cluster简介Redis Cluster 解决的问题 实战演示部署环境创建目录编写Redis配置文件编写Docker-Compose.yml执行yml文件,启动容器查看容器状态创建集群验证集群集群数据验证 总结 前言 随着互联网技术的发展ÿ…...
Tauri(2.5.1)+Leptos(0.8.2)开发自用桌面小程序--DeepSeek辅助编程(俄罗斯方块)
在之前工作基础上(Tauri(2.5.1)Leptos(0.8.2)开发自用桌面小程序-CSDN博客),继续进行自用桌面小程序的开发,这次完全使用DeepSeek辅助编程做一个俄罗斯方块游戏,大部分代码由DeepSeek自主完成,Bug扔给DeepS…...
flex布局实例:把色子放进盒子里
目录 一、flex布局实例:把色子放进盒子里 1、基础样式 二、justify-content 属性 三、flex-direction 属性 四、align-items 属性 五、flex-wrap 属性 二、flex布局应用到常见场景 非常详细的讲解flex布局,看一看,练一练! …...
【启发式算法】RRT*算法详细介绍(Python)
📢本篇文章是博主人工智能(AI)领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对相关等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅…...
基于R语言的亚组分析与森林图绘制1
亚组分析是临床研究中的重要分析方法,其核心是通过将研究对象按基线特征(如年龄、性别或吸烟状况等)划分为不同亚组,进而评估干预措施或暴露因素在各亚组中对结局影响的差异性。 在亚组分析中,交互作用(P for interaction)是关键指标,用于判断干预措施或暴露因素与亚组…...