Redis数据持久化总结笔记

Redis 是内存数据库,如果不将内存中的数据库状态保存到磁盘,那么一旦服务器进程退出,服务器中的数据库状态也会消失。所以 Redis 提供了持久化功能!

Redis 提供了 2 个不同形式的持久化方式

  • RDB(Redis DataBase)

  • AOF(Append Of File)

1.RDB

1.1 RDB(Redis DataBase)介绍

在指定的时间间隔内将内存中的数据集快照写入磁盘, 也就是行话讲的 Snapshot 快照,它恢复时是将快照文件直接读到内存里

Redis 会单独创建(fork)一个子进程来进行持久化,会先将数据写入到 一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。 整个过程中,主进程是不进行任何 IO 操作的,这就确保了极高的性能 如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那 RDB 方式要比 AOF 方式更加的高效。RDB 的缺点是最后一次持久化后的数据可能丢失

Fork

  • Fork 的作用是复制一个与当前进程一样的进程。新进程的所有数据(变量、环境变量、程序计数器等) 数值都和原进程一致,但是是一个全新的进程,并作为原进程的子进程

  • 在 Linux 程序中,fork()会产生一个和父进程完全相同的子进程,但子进程在此后多会 exec 系统调用,出于效率考虑,Linux 中引入了“写时复制技术

  • 一般情况父进程和子进程会共用同一段物理内存,只有进程空间的各段的内容要发生变化时,才会将父进程的内容复制一份给子进程

我们默认的就是RDB,一般情况下不需要修改这个配置!

有时候在生产环境我们会将这个文件进行备份!rdb保存的文件是dump.rdb 都是在我们的配置文件中快照中进行配置的!

1.2 触发机制

  • 配置文件中默认的快照配置

  • 手动save/bgsave命令

  • 执行flushdb/fulshall命令也会产生dump.rdb文件,但是也会将命令记录到dump.rdb文件中,恢复后依旧是空,无意义

  • 执行shutdown且没有设置开启AOF持久化

  • 主从复制时,主节点自动触发

如何检查修复dump.rdb文件?

进入到redis安装目录,执行redis-check-rdb命令

redis-check-rdb ./redisconfig/dump.rdb

1.3 RDB 持久化流程

1.4 配置文件设置

# 1. dump.rdb 文件  可以修改默认名称
dbfilename dump.rdb   # 2.dump.rdb 文件存放位置 rdb 文件的保存路径,也可以修改。默认为 Redis 启动时命令行所在的目录下
dir "/"# 3. redis6  默认的快照配置  自动触发
# 格式:save 秒钟 写操作次数
save 900 1     # 15 分钟内改了 1 次
save 300 10    # 5 分钟内改了 10 次
save 60 10000  # 1 分钟内改了 1 万次# 3. redis7 默认的快照配置  自动触发  表示在 <seconds> 秒内,如果数据有 <changes> 次修改,则会进行一次快照
# 引入了按时间和数据修改次数双重限制的快照保存机制
save <seconds> <changes># 4. 当 Redis 无法写入磁盘的话,直接关掉 Redis 的写操作。推荐 yes
stop-writes-on-bgsave-error yes# 5.rdb文件压缩文件
# 对于存储到磁盘中的快照,可以设置是否进行压缩存储。如果是的话,redis 会采用LZF 算法进行压缩。
# 如果你不想消耗 CPU 来进行压缩的话,可以设置为关闭此功能。推荐 yes
rdbcompression yes# 6.rdb文件 检查完整性
# 在存储快照后,还可以让 redis 使用 CRC64 算法来进行数据校验,但是这样做会增加大约 10%的性能消耗,如果希望获取到最大的性能提升,可以关闭此功能
# 推荐 yes
rdbchecksum yes# 在没有持久化的情况下删除复制中使用的RDB文件。默认情况下no,此选项是禁用的
rdb-del-sync-files no

命令 save VS bgsave

save :在主程序中执行会阻塞当前redis服务器,直到持久化工作完成,执行save命令期间,Redis不能处理其他命令,线上禁止使用

bgsave:redis会在后台异步进行快照操作,不阻塞快照同时还可以相应客户端请求,该触发方式会fork一个子进程由子进程复制持久化过程

lastsave: 可以通过 lastsave 命令获取最后一次成功执行快照的时间

1.5 rdb的备份与还原

备份

  • 先通过 config get dir 查询 rdb 文件的目录

  • 将*.rdb 的文件拷贝到别的地方 一定要将服务产生的RDB文件备份一份,然后分机隔离,避免生产上物理损坏后备份文件也挂了

还原

  • 关闭 Redis

  • 先把备份的文件拷贝到redis启动目录下,redis启动的时候会自动检查dump.rdb 恢复其中的数据! cp dump2.rdb dump.rdb

  • 启动 Redis, 备份数据会直接加载

1.6 rdb优势与劣势

rdb优势

  • 适合大规模的数据恢复

  • 按照业务定时备份

  • 对数据完整性和一致性要求不高更适合使用

  • 节省磁盘空间

  • 恢复速度快,RDB文件在内存中的加载速度要比AOF快很多

rdb劣势

  • Fork 的时候,内存中的数据被克隆了一份,大致 2 倍的膨胀性需要考虑

  • 虽然 Redis 在 fork 时使用了写时拷贝技术,但是如果数据庞大时还是比较消耗性能

  • 在备份周期在一定间隔时间做一次备份,所以如果 Redis 意外 down 掉的话,就会丢失最后一次快照后的所有修改。

1.7 动态停止 RDB

动态停止 RDB

redis-cli config set save ""

手动修改配置

save ""

1.8总结

2.AOF

以日志的形式来记录每个写操作,将Redis执行过的所有指令记录下来(读操作不记录),只许追加文件,但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作

2.1 AOF 持久化流程

  • 1.Client作为命令的来源,会有多个源头以及源源不断的请求命令。

  • 2.在这些命令到达Redis Server 以后并不是直接写入AOF文件,会将其这些命令先放入AOF缓存中进行保存。这里的AOF缓冲区实际上是内存中的一片区域,存在的目的是当这些命令达到一定量以后再写入磁盘,避免频繁的磁盘IO操作。

  • 3.AOF缓冲会根据AOF缓冲区同步文件的三种写回策略将命令写入磁盘上的AOF文件。

  • 4.随着写入AOF内容的增加为避免文件膨胀,会根据规则进行命令的合并(又称AOF重写),从而起到AOF文件压缩的目的。

  • 5.当Redis Server服务器重启的时候会队AOF文件载入数据。

AOF缓冲区三种写回策略

ALways:同步写回,每个写命令执行完立刻同步地将日志写入磁盘

everysec:每秒写回,每个写命令执行完,只是先把日志写到AOF文件的内存缓冲区,每隔1秒把缓冲区中的内容写入到磁盘

no:操作系统控制的写回,每个写命令执行完,只是先把日志写到AOF文件的内存缓冲区,由操作系统决定何时将缓冲区内容写回磁盘

AOF 和 RDB 同时开启,系统默认取 AOF 的数据(数据不会存在丢失)

2.2 配置文件设置

# 1. 开启 AOF
appendonly  yes# 2. redis6  aof文件的名称设置  只有一个 Redis7 Multi Part AOF的设计 有三个
appendfilename "appendonly.aof"# 保存路径
# 3. redis6  AOF保存文件的位置和RDB保存文件的位置一样,都是通过redis.conf配置文件的dir配置
dir /myredis# redis 7 aof文件保存的路劲是在/myredis文件下创建appenddirname设置的文件夹下保存  dir + appenddirname
appenddirname 文件名称# 4.同步频率设置
# 始终同步,每次 Redis 的写入都会立刻记入日志;性能较差但数据完整性比较好
# appendfsync always# 每秒同步 推荐,每秒记入日志一次,如果宕机,本秒的数据可能丢失 每个写命令执行完,只是先把日志写到AOF文件的内存缓冲区,每隔1秒把缓冲区中的内容写入到磁盘
appendfsync everysec# redis 操作系统控制的写回,每个写命令执行完,只是先把日志写到AOF文件的内存缓冲区,由操作系统决定何时将缓冲区内容写回磁盘
# appendfsync no

Redis7 Multi Part AOF的设计

aof文件从1个文件到3个文件

MP-AOF实现 方案概述 顾名思义,MP-AOF就是将原来的单个AOF文件拆分成多个AOF文件。在MP-AOF中,我们将AOF分为三种类型,

  • BASE: 表示基础AOF,它一般由子进程通过重写产生,该文件最多只有一个。

  • INCR:表示增量AOF,它一般会在AOFRW开始执行时被创建,该文件可能存在多个。

  • HISTORY:表示历史AOF,它由BASE和INCR AOF变化而来,每次AOFRW成功完成时,本次AOFRW之前对应的BASE和INCR AOF都将变为HISTORY,HISTORY类型的AOF会被Redis自动删除。

为了管理这些AOF文件,我们引入了一个manifest (清单)文件来跟踪、管理这些AOF。同时,为了便于AOF备份和拷贝,我们将所有的AOF文件和manifest文件放入一个单独的文件目录中,目录名由appenddirname配置(Redis 7.0新增配置项)决定。

Redis7.0 config 中对应的配置项

2.3 AOF 重写

AOF 采用文件追加方式,文件会越来越大 为避免出现此种情况,新增了重写机制,

当AOF 文件的大小超过所设定的阈值时,Redis 就会启动 AOF 文件的内容压缩, 只保留可以恢复数据的最小指令集.可以使用命令 bgrewriteaof

一句话:启动AOF文件的内容压缩,只保留可以恢复数据的最小指令集。

AOF重写不仅降低了文件的占用空间,同时更小的AOF也可以更快地被Redis加载。

重写原理

AOF 文件持续增长而过大时,会 fork 出一条新进程来将文件重写(也是先写临时文件最后再 rename)

# 不写入 aof 文件只写入缓存,用户请求不会阻塞,但是在这段时间如果宕机会丢失这段时间的缓存数据。(降低数据安全性,提高性能)
no-appendfsync-on-rewrite:yes# 还是会把数据往磁盘里刷,但是遇到重写操作,可能会发生阻塞。(数据安全,但是性能降低)
no-appendfsync-on-rewrite:no

触发机制,何时重写

Redis 会记录上次重写时的 AOF 大小,默认配置是当 AOF 文件大小是上次 rewrite 后大小的一倍且文件大于 64M 时触发

重写虽然可以节约大量磁盘空间,减少恢复时间。但是每次重写还是有一定的负担的,

因此设定 Redis 要满足一定条件才会进行重写。

# 设置重写的基准值,文件达到 100%时开始重写(文件是原来重写后文件的 2 倍时触发)
auto-aof-rewrite-percentage:100# 设置重写的基准值,最小文件 64MB。达到这个值开始重写。
auto-aof-rewrite-min-size:64mb

触发方式

  • 自动触发 满足配置文件中的选项后,Redis会记录上次重写时的AOF大小,默认配置是当AOF文件大小是上次rewrite后大小的一倍且文件大于64M时

  • 手动触发 客户端向服务器发送bgrewriteaof命令

重写流程

  • bgrewriteaof 触发重写,判断是否当前有 bgsave 或 bgrewriteaof 在运行,如果有,则等待该命令结束后再继续执行

  • 主进程 fork 出子进程执行重写操作,保证主进程不会阻塞

  • 子进程遍历 redis 内存中数据到临时文件,客户端的写请求同时写入 aof_buf 缓冲区和 aof_rewrite_buf 重写缓冲区保证原 AOF 文件完整以及新 AOF 文件生成期间的新的数据修改动作不会丢失

  • 子进程写完新的 AOF 文件后,向主进程发信号,父进程更新统计信息 主进程把 aof_rewrite_buf 中的数据写入到新的 AOF 文件

  • 使用新的 AOF 文件覆盖旧的 AOF 文件,完成 AOF 重写。

2.4 AOF 修复/恢复

AOF 的备份机制和性能虽然和 RDB 不同, 但是备份和恢复的操作同 RDB 一样,都是拷贝备份文件,需要恢复时再拷贝到 Redis 工作目录下,启动系统即加载

正常恢复

  • 修改默认的 appendonly no,改为 yes

  • 将有数据的 aof 文件复制一份保存到对应目录(查看目录:config get dir)

  • 恢复:重启 redis 然后重新加载

异常恢复

  • 修改默认的 appendonly no,改为 yes

  • 如遇到 AOF 文件损坏,通过/usr/local/bin/redis-check-aof--fix appendonly.aof 进行恢复

  • 备份被写坏的 AOF 文件

  • 恢复:重启 redis,然后重新加载

2.5 优缺点

优势

  • 使用AOF Redis 更加持久:您可以有不同的fsync 策略,根本不fsync、每秒 fsync、每次查询时fsync。使用每秒fsync的默认策略,写入性能仍然很棒。fsync 是使用后台线程执行的,当没有fsync正在进行时,主线程将努力执行写入,因此您只能丢失一秒钟的写入。

  • AOF 日志是一个仅附加日志,因此不会出现寻道问题,也不会在断电时出现损坏问题。即使由于某种原因(磁盘已满或其他原因) 日志以写一半的命令结尾,redis-check-aof 工具也能够轻松修复它。

  • 当AOF 变得太大时,Redis 能够在后台自动重写AOF。重写是完全安全的,因为当 Redis继续附加到旧文件时,会使用创建当前数据集所需的最少操作集生成一个全新的文件,一旦第二个文件准备就绪,Redis 就会切换两者并开始附加到新的那一个

  • AOF以易于理解和解析的格式依次包含所有操作的日志。您甚至可以轻松导出AOF文件。例如,即使您不小心使用孩FLUSHALL命令刷新了所有内容,只要在此期间没有执行日志重写,您仍然可以通过停止服务器、删除最新命令并重新启动 Redis 来保存您的数据集。

劣势

  • 比起 RDB 占用更多的磁盘空间

  • 恢复备份速度要慢

  • 每次读写都同步的话,有一定的性能压力

  • 存在个别 Bug,造成恢复不能

2.6 总结

3.RDB与AOF比较

官方推荐两个都启用。

如果对数据不敏感,可以选单独用 RDB。

不建议单独用 AOF,因为可能会出现 Bug。

如果只是做纯内存缓存,可以都不用

扩展:

1、RDB 持久化方式能够在指定的时间间隔内对你的数据进行快照存储

2、AOF 持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据,AOF命令以Redis 协议追加保存每次写的操作到文件末尾,Redis还能对AOF文件进行后台重写(命令合并),使得AOF文件的体积不至于过大。

3、只做缓存,如果你只希望你的数据在服务器运行的时候存在,你也可以不使用任何持久化

4、同时开启两种持久化方式 在这种情况下,当redis重启的时候会优先载入AOF文件来恢复原始的数据,因为在通常情况下AOF文件保存的数据集要比RDB文件保存的数据集要完整。 RDB 的数据不实时,同时使用两者时服务器重启也只会找AOF文件

那要不要只使用AOF呢?建议不要,因为RDB更适合用于备份数据库(AOF在不断变化不好备份),快速重启,而且不会有 AOF可能潜在的Bug,留着作为一个万一的手段。

5、性能建议

因为RDB文件只用作后备用途,建议只在Slave上持久化RDB文件,而且只要15分钟备份一次就够 了,只保留 save 900 1 这条规则。

如果Enable AOF ,好处是在最恶劣情况下也只会丢失不超过两秒数据,启动脚本较简单只load自己的AOF文件就可以了,代价一是带来了持续的IO,二是AOF rewrite 的最后将 rewrite 过程中产生的新数据写到新文件造成的阻塞几乎是不可避免的。只要硬盘许可,应该尽量减少AOF rewrite的频率,AOF重写的基础大小默认值64M太小了,可以设到5G以上,默认超过原大小100%大小重写可以改到适当的数值。

如果不Enable AOF ,仅靠 Master-Slave Repllcation 实现高可用性也可以,能省掉一大笔IO,也减少了rewrite时带来的系统波动。代价是如果Master/Slave 同时倒掉,会丢失十几分钟的数据, 启动脚本也要比较两个 Master/Slave 中的 RDB文件,载入较新的那个,微博就是这种架构。

4.RDB-AOF混合持久化

Redis配置文档解答:RDB和AOF共存时会优先加载AOF文件

数据恢复顺序和加载流程

你怎么选?用哪个?

  • RDB持久化方式能够在指定的时间间隔对你的数据进行快照存储。

  • AOF持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据,AOF命令以redis协议追加保存每次写的操作到文件末尾。

同时开启两种持久化方式

  • 在这种情况下,当redis重启的时候会优先载入AOF文件来恢复原始的数据,因为在通常情况下AOF文件保存的数据集要比RDB文件保存的数据集要完整。

  • RDB的数据不实时,同时使用两者时服务器重启也只会找AOF文件。但是作者也不建议只使用AOF方式备份,因为RDB更适合用于备份数据库(AOF在不断的变化不好备份),留着RDB作为一个万一的手段

推荐方式

RDB+AOF混合方式

  • 开启混合方式设置 设置aof-use-rdb-preamble的值为yes, yes表示开启,设置为no表示禁用

  • RDB+AOF的混合方式--------->结论:RDB镜像做全量持久化,AOF做增量持久化 先使用RDB进行快照存储,然后使用AOF持久化记录所有的写操作,当重写策略满足或手动触发重写的时候,将最新的数据存储为新的RDB记录。这样的话,重启服务的时候会从RDB和AOF两部分恢复数据,既保证了数据完整性,又提高了恢复数据的性能。简单来说:混合持久化方式产生的文件一部分是RDB格式,一部分是AOF格式。----》AOF包括了RDB头部+AOF混写

5.最后

感谢大家,请大家多多支持!

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

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

相关文章

VS2019配置Open3Dv0.18.0版本库

文章目录 一、引言二、配置过程三、举个例子参考资料一、引言 现在如果直接使用vs2019对Open3D(v0.15.2)进行编译,会比较麻烦,一是需要科学上网,另一个就是容易出现错误,这里就仍然按照之前的思路来配置新版本的Open3D(VS2015(及以上版本)配置Open3Dv0.15.2版本库)。 二…

科研小白入门工具

三、科研绘图 1.流程图绘制工具&#xff1a;powerpoint、亿图图示、visio、draw.io 2.绘制标准&#xff1a;布局合理、色彩鲜明、字体大小、矢量输出 矢量图绘制推荐流程&#xff1a;亿图图示绘制--visio--word--pdf无损放大 3.文章插图&#xff1a;excel、origin、matlab、…

【JUC并发编程系列】深入理解Java并发机制:Volatile从底层原理解析到高级应用技巧(六、Volatile关键字、JMM、重排序、双重检验锁)

文章目录 【JUC并发编程系列】深入理解Java并发机制&#xff1a;Volatile从底层原理解析到高级应用技巧(六、Volatile关键字、JMM、重排序、双重检验锁)1. Volatile的特性2. Volatile的用法3. CPU多核硬件架构剖析4. JMM内存模型4.1 主要特性4.2 JMM 的工作原理4.3 实现机制 5.…

电商跨境电商商城系统/网上商城接口/电商数据接口详情

电商API接口背景&#xff1a;电商运营中&#xff0c;数据分析这项工作越来越重要&#xff0c;许多品牌方也越来越热衷去做电商数据分析。不过&#xff0c;全面的数据该如何获取呢&#xff0c;此时&#xff0c;电商数据接口的重要性便凸显出来了。 电商API数据接口主要有以下特…

ASP.NET Core8.0学习笔记(十九)——EF Core DbSet

一、DbSet概述 1.DbSet提供了通过DbContext对表进行查询操作的路径。DbSet对应的属性名称将默认映射为实体T的表名。 2.使用DbSet<T>进行查询的方法&#xff1a; (1)直接在DbContext中创建对应的DbSet<T>属性 (2)使用DbSet DbContext.Set<T>方法操作数据表。…

对c语言中的指针进行深入全面的解析

1.普通的指针: 实际上指针就是存放地址的变量&#xff0c;eg: int a10; int *p&a; 拆分一下int *中的*说明p是一个指针&#xff0c;int是它所指向的类型&#xff1b; 2.字符串指针和字符串数组 char*str1"abcd"; 先看这一个&#xff0c;这个就是一个字符串…

[vulnhub] Hackademic.RTB1

第一次打靶机&#xff0c;思路看的红队笔记 https://www.vulnhub.com/entry/hackademic-rtb1,17/ 环境&#xff1a;kali Linux - 192.168.75.131&#xff0c;靶机 - 192.168.75.132 主机发现和端口扫描 扫描整个网络有哪台机子在线&#xff0c;不进行端口扫描 nmap -sP 192.16…

关于API概念:连接数字世界的桥梁

在数字化时代&#xff0c;信息和数据的流动是构建现代应用程序的基础。API&#xff08;应用程序编程接口&#xff09;作为连接不同软件和服务的桥梁&#xff0c;正逐渐成为现代技术架构中不可或缺的一部分。本文将探讨API的概念、重要性以及它如何塑造我们的数字生活。 什么是A…

解决Echarts:宽度100%,渲染的宽度却是100px

为什么我们宽度设置了100%&#xff0c;结果变为了100px&#xff1f; 源码这里没有获取到clientWidth&#xff0c;会将设置的width:100%转换称100px 解决办法&#xff1a; <div ref"numberPieRef"></div>let numberPieRef ref(null); let myChart nu…

基于二自由度汽车模型的汽车质心侧偏角估计

一、质心侧偏角介绍 在车辆坐标系中&#xff0c;质心侧偏角通常定义为质心速度方向与车辆前进方向的夹角。如下图所示&#xff0c;u为车辆前进方向&#xff0c;v为质心速度方向&#xff0c;u和v之间的夹角便是质心侧偏角。 质心侧偏角的作用有如下三点&#xff1a; 1、稳定性…

深度学习之表示学习 - 贪心逐层无监督预训练篇

引言 在人工智能的浩瀚星空中&#xff0c;深度学习以其强大的数据处理与模式识别能力&#xff0c;成为了一颗璀璨的明星。而表示学习&#xff0c;作为深度学习的核心基石之一&#xff0c;正引领着这一领域不断突破边界。表示学习旨在将原始数据转换为更加抽象、更有意义的特征…

【51实物与仿真】基于51单片机设计的波形/函数发生器(正弦波、锯齿波、三角波、矩形波,设定频率步进值,改变振幅,LCD显示)——文末完整资料链接

基于51单片机设计的波形函数发生器 演示视频: 功能简介: 1.本设计基于STC89C51/52(与AT89S51/52、AT89C51/52通用,可任选)单片机。 2.LCD1602液晶显示波形种类和频率值(10-100HZ)。 3.按键设置波形种类和设定频率步进值。 4.电位器器改变振幅(0V-3.5V稳定)。 5…

苹果AI手机遇阻,国产手机找到超车机遇

行至九月&#xff0c;2024年&#xff0c;这个所谓AI手机的元年&#xff0c;已经走过近三个季度了。 市场最为期待的AI手机机型也基本都发布了。9月20日&#xff0c;首款搭载Apple Intelligence功能的苹果新品iPhone16正式发售。或许是为了进一步扩大销售&#xff0c;今年天猫A…

html+css(如何用css做出京东页面,静态版)

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>京东</title><link rel"stylesheet&q…

OmniPeek 空口抓包软件安装指导

OmniPeek 空口抓包软件安装指导 1 双击omnp75安装包---Unzip解压缩 生成install包 2 进入install文件夹点击setup开始进入安装界面 3 点击install Omnipeek 4 点击next,勾选手动安装

基于微信小程序的竞赛答题小程序开发笔记(一)

开发背景调研 中小学学科答题小程序&#xff0c;适合各中小学校方&#xff0c;老师或者家长。通过互动和参与式学习&#xff0c;小程序能够通过游戏化元素提升学习的积极性和参与度&#xff0c;从而提升学习效率&#xff0c;促进学生自主学习 功能规划 分类题库&#xff1a;…

①大缓存ModbusRTU485数据集中采集器寄存器线圈重映射从站并发采集Modbus 串口RS485 转 RS485

大缓存ModbusRTU485数据集中采集器寄存器线圈重映射从站并发采集https://item.taobao.com/item.htm?ftt&id811821574300 产品型号&#xff1a; 一分一路 MS-A1-C011 一分2路 MS-A1-C021 一分4路 MS-A1-C041 一分7路 MS-A1-C071 一般技术规格 1.串口 MS-A1…

扩大产品库存怎么破?手把手教你,全开源哦!

要在产品上扩大库存&#xff1f;&#xff01;这太常见了&#xff0c;短视频时代&#xff0c;有大量东西要储存&#xff1a;视频、音频、文件等。 提到外扩&#xff0c;就不得不提到编写各种驱动&#xff0c;还有Flash替换。。。又是落发时刻啊&#xff01; 来吧&#xff01;也…

【鸿蒙HarmonyOS NEXT】用户首选项Preference存储数据

【鸿蒙HarmonyOS NEXT】数据存储之用户首选项Preference 一、环境说明二、Preference运作机制三、示例代码加以说明四、小结 一、环境说明 DevEco Studio 版本&#xff1a; API版本&#xff1a;以12为主 二、Preference运作机制 应用场景&#xff1a; 用户首选项为应用提…

从零开始之AI面试小程序

从零开始之AI面试小程序 文章目录 从零开始之AI面试小程序前言一、工具列表二、部署流程1. VMWare安装2. Centos安装3. Centos环境配置3.1. 更改子网IP3.2. 配置静态IP地址 4. Docker和Docker Compose安装5. Docker镜像加速源配置6. 部署中间件6.1. MySQL部署6.2. Redis部署 7.…