Redis 高可用:从主从到集群的全面解析

目录

    • 一、主从复制 (基础)
      • 1. 同步复制
        • a. 全量数据同步
        • b. 增量数据同步
        • c. 可能带来的数据不一致
      • 2. 环形缓冲区
        • a. 动态调整槽位
      • 3. runid
      • 4. 主从复制解决单点故障
        • a. 单点故障
        • b. 可用性问题
      • 5. 注意事项
        • a. Replica 主动向 Master 建立连接
        • b. Replica 主动向 Master 拉取数据
    • 二、哨兵模式
      • 1. 主机下线
      • 2. 备机下线
      • 3. 哨兵监控
        • a. 从库为主
        • b. 故障转移
      • 4. 连锁转换节点
      • 5. 如何使用
        • a. 获取主节点地址,并连接
        • b. 龙卷风监控 / 监听模式
      • 6. 缺点
        • a. 没有预设数据交互机制
        • b. 没有高效的"票机制"
      • 7. 几个步骤
        • a. 去中心化
        • b. 主节点对称
        • c. 解决了数据广播
      • 8. 特性
        • a. 客户端自动保持缓存位置,以服务为准,待节点异常后主机广播分配给节点ID
        • b. 可人力效应迁移
    • 三、集群模式 (Cluster)
      • 1. 将集群内托管在一个节点
      • 2. 客户端不在线节点,将初始化找回的命令、鼠标拖拽到节点
      • 3. 流程
        • a. 推动节点响应主机传递的数据交换
        • b. 故障转移(主节点下线)
        • c. 由下线主节点的副本传入数据,交给节点中的负载库作为主节点
        • d. 从布置点下线主节点的副本信息供用,拷贝需接受的负载库状态作为节点
        • e. 备用节点接入副信息传送
      • 4. 缺点
        • a. 因为主从采用同步分离库所以到存储数据尽量大防的端
      • 5. 问题
        • a. 多次错误响应,解决后确认,频率分段,自动解决计算
      • 6. 特性
        • a. 数据分化
        • b. 有容有性
        • c. 高可靠
        • d. 动态扩容性
        • e. 生产调整
        • f. 实际需要 Cluster 模式或高可用以及常规管理
    • 四、分布式延时队列
      • 1. 数据变化化
      • 2. 有存存有
      • 3. 高可靠
      • 4. 动态分配性
      • 5. 生产性调整
      • 6. 实现
        • a. 使用 ZSet 存储延时任务
        • b. 每个子节点多个键——分组处理
    • 五、总结
      • 关键要点
      • 应用建议
      • 参考

Redis 作为一个高性能的内存数据库,支持多种复制和高可用性机制,包括主从复制、哨兵模式、集群模式以及分布式延时队列。本文将根据提供的树状结构,详细展开介绍这些机制的原理、实现、优缺点及应用场景,帮助读者全面理解和应用 Redis 的高级功能。

一、主从复制 (基础)

主从复制是 Redis 实现数据冗余和高可用性的基础机制。通过将数据从主节点(Master)复制到从节点(replica),可以实现数据备份、读写分离以及故障恢复等功能。
在这里插入图片描述

1. 同步复制

同步复制是主从复制的核心,确保从节点的数据与主节点保持一致。同步复制包括全量数据同步和增量数据同步两个阶段。

a. 全量数据同步

在这里插入图片描述

原理:当从节点首次连接到主节点,或者在某些情况下(如主从断开连接后重新连接),需要从主节点获取完整的数据集。这一过程称为全量数据同步。

步骤

  1. 从节点发送 SYNC 命令给主节点,表示希望进行数据同步。
  2. 主节点接收到 SYNC 命令后,创建一个子进程(使用 fork()),子进程负责生成 RDB 快照文件。
  3. 子进程将 RDB 文件发送给从节点,从节点接收并加载数据,确保与主节点的数据一致。
  4. 全量同步完成后,主节点和从节点进入增量同步阶段,继续传输主节点的新写命令。

优缺点

  • 优点
    • 保证从节点与主节点数据的一致性。
    • 简单可靠,适用于初始同步和主从重连场景。
  • 缺点
    • 全量同步需要传输大量数据,可能导致网络带宽占用高。
    • 在数据量大的情况下,同步过程耗时较长,影响系统性能。
b. 增量数据同步

在这里插入图片描述

原理:在全量同步完成后,主节点将接收到的所有写命令实时传输给从节点,确保从节点数据的实时更新。这一过程称为增量数据同步。

步骤

  1. 主节点将所有新的写命令通过发布/订阅机制(Pub/Sub)实时发送给从节点。
  2. 从节点接收到命令后,按照顺序执行这些命令,保持数据一致性。

优缺点

  • 优点
    • 实时性强,确保从节点数据与主节点同步。
    • 增量同步的开销相对较小,仅传输变化的数据。
  • 缺点
    • 在高并发环境下,主节点需要处理大量的命令传输,可能影响性能。
    • 如果增量同步过程中出现网络延迟或中断,可能导致数据不一致。
c. 可能带来的数据不一致

尽管主从复制旨在保持数据一致性,但在某些情况下,可能会出现数据不一致的问题。

原因

  1. 网络延迟或中断:主从之间的网络问题可能导致部分命令未能及时传输,导致数据不同步。
  2. 主节点故障:在主节点发生故障之前,未完成的命令可能未能传输到从节点,导致数据丢失。
  3. 从节点故障恢复:从节点在故障恢复过程中,如果没有正确执行全量和增量同步,可能导致数据不一致。

解决方法

  • 监控与报警:通过 Redis Sentinel 或其他监控工具,及时发现主从复制中的问题。
  • 自动故障转移:在检测到主节点故障时,自动将从节点提升为新的主节点,确保数据服务的持续性。
  • 数据验证:定期对主从节点的数据进行校验,发现不一致时进行修复。

2. 环形缓冲区

环形缓冲区(Circular Buffer)是 Redis 实现高效复制的一种数据结构,用于缓存主节点发送给从节点的命令。

a. 动态调整槽位

原理:环形缓冲区的大小可以动态调整,以适应不同负载下的复制需求。当主节点发送的命令量增加时,缓冲区会自动扩展;当命令量减少时,缓冲区会收缩。

优点

  • 高效性:减少内存分配和释放的频率,提高系统性能。
  • 灵活性:能够适应不同的负载情况,确保复制过程的稳定性。

缺点

  • 复杂性:实现动态调整槽位需要更复杂的逻辑,增加代码的复杂度。
  • 内存管理:需要精细管理缓冲区的内存,避免内存泄漏或溢出。

3. runid

在这里插入图片描述

定义runid 是 Redis 用于唯一标识主从节点之间复制关系的标识符。

功能

  • 标识关联:通过 runid,从节点能够识别并连接到对应的主节点,确保复制过程的正确性。
  • 避免重复:在多节点环境中,确保每个从节点只能复制一个主节点,避免数据冲突。

4. 主从复制解决单点故障

主从复制不仅仅是数据备份机制,更是解决 Redis 单点故障(Single Point of Failure, SPOF)问题的重要手段。

a. 单点故障

定义:单点故障指系统中某个关键组件的失效会导致整个系统不可用。

在 Redis 中的表现

  • 主节点故障:如果主节点宕机,所有的写操作将无法进行,系统服务可能会中断。
b. 可用性问题

通过配置从节点,可以在主节点故障时迅速切换到从节点,保持系统的高可用性。

解决方法

  • 多从节点:配置多个从节点,分散复制负载,提升系统的容错能力。
  • 自动故障转移:结合 Redis Sentinel,实现主节点故障时自动提升从节点为新主节点。

5. 注意事项

在配置和使用主从复制时,需要注意以下几点,以确保复制过程的稳定和高效。

a. Replica 主动向 Master 建立连接

原理:从节点(Replica)主动向主节点(Master)建立连接,确保复制链条的正确性和可靠性。

好处

  • 连接稳定:从节点主动连接主节点,可以更好地管理连接状态,避免连接被动断开。
  • 负载均衡:无论复制链条中的哪个从节点,都能确保从节点主动拉取数据,避免主节点的负载过高。
b. Replica 主动向 Master 拉取数据

原理:从节点主动拉取主节点的数据,确保复制过程中的数据传输顺序和完整性。

好处

  • 数据一致性:从节点按顺序拉取主节点的写命令,确保数据的一致性。
  • 复制效率:从节点主动拉取数据,可以根据自身的处理能力和网络状况,动态调整拉取速度,优化复制效率。

二、哨兵模式

Redis 哨兵(Sentinel)模式是一种高可用性解决方案,负责监控主节点和从节点的状态,并在主节点发生故障时自动进行故障转移。
在这里插入图片描述

1. 主机下线

情景:当主节点由于网络问题、硬件故障或其他原因下线,哨兵需要检测到这一变化,并采取相应的措施。

2. 备机下线

情景:从节点(备机)也可能由于各种原因下线,哨兵需要监控从节点的状态,确保至少有一个从节点可用。

3. 哨兵监控

哨兵通过监控主节点和从节点的状态,决定是否需要进行故障转移。

a. 从库为主

解释:当主节点下线时,哨兵会从现有的从节点中选择一个新的主节点,确保系统的持续可用。

b. 故障转移

步骤

  1. 检测故障:多个哨兵实例通过心跳机制检测到主节点故障。
  2. 达成一致:通过投票机制,确认主节点确实发生故障。
  3. 选举新主:从可用的从节点中选举一个新的主节点。
  4. 更新配置:通知所有从节点指向新的主节点,并通知客户端更新主节点信息。
  5. 恢复旧主:待故障主节点恢复后,将其配置为新的从节点,重新加入复制链条。

4. 连锁转换节点

定义:哨兵在故障转移过程中,负责管理节点之间的关系,确保复制链条的完整性和数据的一致性。

功能

  • 协调节点:协调主从节点之间的转换,确保新主节点能够顺利接管主节点的角色。
  • 通知客户端:通过发布订阅机制,通知客户端更新主节点信息,保证客户端能够连接到新的主节点。

5. 如何使用

a. 获取主节点地址,并连接

步骤

  1. 配置哨兵:在哨兵配置文件中指定主节点的地址和端口,以及需要监控的主节点名称。
  2. 启动哨兵:启动多个哨兵实例,分散在不同的服务器上,避免单点故障。
  3. 连接主节点:哨兵实例通过配置文件连接到主节点,开始监控其状态。
b. 龙卷风监控 / 监听模式

解释:当原主节点失去响应后,哨兵进入监听模式,实时监控主节点的状态变化,并准备进行故障转移。

操作

  • 实时监控:哨兵持续监控主节点的心跳信号,检测主节点是否在线。
  • 触发故障转移:当检测到主节点失联时,哨兵触发故障转移流程,选举新的主节点。

6. 缺点

尽管哨兵模式提供了高可用性,但也存在一些缺点和限制。

a. 没有预设数据交互机制

解释:哨兵模式主要负责监控和故障转移,缺乏数据同步和交互的高级机制,无法保证在故障转移过程中数据的实时同步。

影响

  • 数据一致性:在故障转移过程中,可能会存在短暂的数据不一致情况。
  • 复杂性增加:需要配合其他机制(如复制链条)确保数据的一致性。
b. 没有高效的"票机制"

解释:"票机制"指的是在选举和决策过程中,通过投票方式达成一致的机制。哨兵模式中的投票机制相对简单,缺乏高效的决策流程。

影响

  • 决策效率:在高负载或网络波动情况下,哨兵的决策效率可能下降。
  • 一致性问题:在多个哨兵实例之间,可能会出现决策不一致的情况,影响故障转移的可靠性。

7. 几个步骤

a. 去中心化

定义:哨兵模式采用去中心化的架构,不依赖单一的控制中心,多个哨兵实例共同监控和管理主从节点。

优点

  • 高可靠性:避免单点故障,提高系统的可靠性。
  • 分布式管理:多个哨兵实例可以协同工作,提升监控和故障转移的效率。
b. 主节点对称

解释:哨兵模式中,主节点和从节点的角色对称化管理,确保每个节点的状态都能被准确监控和管理。

优点

  • 灵活性:主节点和从节点可以动态切换角色,适应不同的业务需求。
  • 负载均衡:通过对称化管理,可以实现主节点和从节点之间的负载均衡,提高系统性能。
c. 解决了数据广播

解释:哨兵模式通过哨兵实例之间的协调,避免了数据广播带来的性能问题和复杂性。

优点

  • 高效性:减少不必要的数据广播,提高系统的整体性能。
  • 稳定性:通过协调机制,确保数据广播的稳定性和可靠性。

8. 特性

a. 客户端自动保持缓存位置,以服务为准,待节点异常后主机广播分配给节点ID

解释:客户端在连接到 Redis 集群时,会自动缓存主节点的位置。当主节点发生故障时,哨兵会广播新的主节点信息,客户端自动更新连接信息,确保服务的连续性。

优点

  • 高可用性:客户端能够自动感知主节点的变化,保证服务的持续性。
  • 简便性:无需手动干预,客户端自动完成连接切换,简化运维工作。
b. 可人力效应迁移

解释:在某些情况下,故障转移可能需要人工干预,例如在自动故障转移失败时,运维人员可以手动进行节点迁移和管理。

优点

  • 灵活性:在自动机制失效时,仍然可以通过人工操作确保系统的高可用性。
  • 控制力:运维人员可以根据具体情况,灵活调整节点的角色和配置,优化系统性能。

三、集群模式 (Cluster)

Redis Cluster 是 Redis 提供的一种分布式解决方案,支持数据分片、故障转移和高可用性,适用于大规模数据和高并发访问的场景。

1. 将集群内托管在一个节点

解释:在 Redis Cluster 中,数据被分片存储在多个节点上,每个节点负责一部分数据的存储和管理。

优点

  • 数据分片:通过分片机制,支持存储海量数据,扩展性强。
  • 负载均衡:数据分布在多个节点上,实现读写负载的均衡,提高系统吞吐量。

2. 客户端不在线节点,将初始化找回的命令、鼠标拖拽到节点

说明:此部分可能存在翻译或表达上的问题。应理解为:客户端在访问集群时,如果某个节点不可用,会自动重新定位数据所在的节点,确保数据访问的连续性。

实现

  • 智能路由:客户端通过集群协议,能够自动发现数据所在的节点,进行请求的路由和转发。
  • 故障恢复:当某个节点下线时,集群能够自动进行故障转移,保证数据的可访问性。

3. 流程

Redis Cluster 的工作流程包括数据分片、故障转移和节点管理等步骤。
在这里插入图片描述

a. 推动节点响应主机传递的数据交换

解释:集群中的每个节点负责接收和处理来自客户端的请求,并与其他节点进行数据交换,确保数据的一致性和完整性。

步骤

  1. 请求处理:客户端发送请求到集群中的任意节点。
  2. 数据路由:节点根据数据分片规则,将请求转发到负责该数据的节点。
  3. 数据交换:节点之间通过内部通信协议,进行数据的同步和交换,确保数据的分布和一致性。
b. 故障转移(主节点下线)

步骤

  1. 检测故障:集群中的节点通过心跳机制,检测到某个主节点下线。
  2. 选举新主:集群中的其他主节点会选举一个从节点提升为新的主节点。
  3. 数据迁移:将原主节点的数据迁移到新主节点,确保数据的完整性和可访问性。
  4. 更新配置:通知客户端和其他节点,更新新的主节点信息,确保后续请求的正确路由。
c. 由下线主节点的副本传入数据,交给节点中的负载库作为主节点

解释:在主节点下线后,其从节点将被提升为新的主节点,承担主节点的角色,继续提供数据服务。

步骤

  1. 提升从节点:选举出新的主节点,从原主节点的从节点中选择一个最优的从节点进行提升。
  2. 数据同步:确保新主节点的数据与其他从节点保持一致,避免数据丢失。
  3. 负载转移:新主节点开始承担主节点的写操作,其他节点继续作为从节点进行数据同步。
d. 从布置点下线主节点的副本信息供用,拷贝需接受的负载库状态作为节点

解释:在故障转移过程中,集群需要确保新主节点的数据状态正确,并通知其他节点进行同步和数据迁移。

步骤

  1. 状态同步:新主节点与其他从节点同步数据状态,确保数据一致性。
  2. 通知更新:集群中的所有节点更新新的主节点信息,确保数据请求能够正确路由。
  3. 负载分配:根据新的数据分片规则,重新分配数据负载,优化系统性能。
e. 备用节点接入副信息传送

解释:在故障转移完成后,备用节点(从节点)继续复制新主节点的数据,确保集群的高可用性和数据冗余。

步骤

  1. 重新配置:备用节点重新配置为新的从节点,连接到新的主节点。
  2. 数据同步:备用节点从新的主节点拉取数据,保持数据的一致性。
  3. 监控与维护:继续监控备用节点的状态,确保系统的稳定性和高可用性。

4. 缺点

尽管 Redis Cluster 提供了强大的分布式和高可用性功能,但也存在一些缺点和挑战。

a. 因为主从采用同步分离库所以到存储数据尽量大防的端

解释:由于 Redis Cluster 中主从节点采用同步复制机制,数据分片和存储需要尽量避免单个节点的数据量过大,以防止同步过程中的性能瓶颈和数据不一致。

影响

  • 数据分布不均:如果某个分片的数据量过大,可能导致该节点的性能瓶颈,影响整个集群的性能。
  • 同步开销:大数据量的同步过程会增加网络带宽和磁盘 I/O 的负载,影响系统的整体性能。

5. 问题

a. 多次错误响应,解决后确认,频率分段,自动解决计算

解释:在集群运行过程中,可能会遇到多次错误响应,如节点不可用、数据同步失败等。Redis Cluster 需要具备自动检测和修复这些问题的能力。

解决方法

  • 错误检测:通过心跳机制和错误日志,实时检测集群中的异常状态。
  • 自动修复:在检测到问题后,自动进行故障转移、数据迁移等修复操作,恢复集群的正常运行。
  • 频率控制:控制故障检测和修复的频率,避免过于频繁的操作影响系统稳定性。

6. 特性

Redis Cluster 拥有以下主要特性,确保其在分布式环境中的高效运行和高可用性。

a. 数据分化

定义:通过分片机制,将数据分布在多个节点上,实现数据的水平扩展。

优点

  • 扩展性强:支持大规模数据存储,满足高并发访问需求。
  • 负载均衡:数据分布在多个节点上,实现读写负载的均衡,提升系统性能。
b. 有容有性

定义:集群具备容错能力,能够在部分节点故障的情况下继续提供服务。

优点

  • 高可靠性:部分节点故障不会影响整个集群的可用性,确保系统的持续运行。
  • 数据冗余:通过主从复制,保证数据的冗余备份,防止数据丢失。
c. 高可靠

定义:通过故障转移和数据复制机制,确保数据的可靠存储和高可用性。

优点

  • 数据安全:多副本存储,防止单点故障导致的数据丢失。
  • 持续可用:自动故障转移机制,保证服务的持续可用性。
d. 动态扩容性

定义:支持动态添加和移除节点,实现在线扩容和缩容。

优点

  • 灵活性高:根据业务需求,随时调整集群规模,适应流量变化。
  • 最小化停机:在线扩容和缩容,避免系统停机,保证业务连续性。
e. 生产调整

定义:支持在生产环境中对集群进行实时调整和优化,提升系统性能和稳定性。

优点

  • 实时监控:通过监控工具,实时了解集群状态,及时发现和解决问题。
  • 优化能力:根据业务需求,调整数据分片、节点配置等,优化系统性能。
f. 实际需要 Cluster 模式或高可用以及常规管理

解释:在实际应用中,是否采用 Cluster 模式取决于业务需求和系统规模。

适用场景

  • 大规模数据和高并发访问:需要 Redis Cluster 提供的数据分片和高可用性。
  • 高可用性需求:需要通过主从复制和故障转移机制,确保系统的持续可用性。
  • 常规管理:需要简化集群管理和运维,提高系统的可维护性。

四、分布式延时队列

分布式延时队列是一种基于 Redis 实现的高效任务调度机制,适用于需要定时执行的任务和延时处理的场景。

1. 数据变化化

解释:任务在延时队列中的状态随着时间的推移而变化,从未处理状态逐渐转变为待处理状态,最终被执行。

实现

  • 任务状态管理:通过 Redis 的数据结构,管理任务的不同状态,确保任务按时执行。
  • 状态转移:任务在队列中的状态变化由系统自动触发,确保任务按计划执行。

2. 有存存有

解释:延时队列中的任务被可靠地存储,防止任务丢失,确保任务的高可靠性。

实现

  • 持久化存储:通过 Redis 的持久化机制(RDB、AOF)保存队列中的任务,防止数据丢失。
  • 数据备份:通过主从复制和集群模式,实现任务数据的冗余备份,提高系统的可靠性。

3. 高可靠

解释:分布式延时队列具备高可靠性,确保任务的准确执行和系统的稳定运行。

实现

  • 任务确认机制:任务执行后进行确认,确保任务不会重复执行或遗漏执行。
  • 失败重试机制:任务执行失败时,自动进行重试,确保任务最终执行成功。

4. 动态分配性

解释:延时队列能够根据系统负载和资源情况,动态分配任务到不同的消费者,提高系统的吞吐量和资源利用率。

实现

  • 任务分片:将任务分配到不同的消费者,避免单个消费者的负载过高。
  • 负载均衡:根据消费者的处理能力,动态调整任务的分配,确保系统的高效运行。

5. 生产性调整

解释:系统能够根据业务需求和负载变化,实时调整延时队列的配置和参数,优化任务处理效率。

实现

  • 动态配置:根据系统负载,实时调整队列的参数,如任务的优先级、处理速度等。
  • 实时监控:通过监控工具,实时了解队列的运行状态,及时进行优化调整。

6. 实现

分布式延时队列通常使用 Redis 的有序集合(ZSet)来存储和管理延时任务。

a. 使用 ZSet 存储延时任务

原理:通过 Redis 的有序集合,将任务的执行时间作为分数(score),任务标识作为成员(member),实现任务的按时排序和管理。

步骤

  1. 构建多个 ZSet:为不同的任务类型或消费者构建多个有序集合,每个 ZSet 负责存储特定类型的延时任务。
  2. 每个 ZSet 对应一个消费者:每个消费者负责处理一个或多个 ZSet 中的任务,确保任务的均衡处理。
  3. 生产者推送到某个 ZSet 中生产延时:生产者根据任务类型或负载情况,将任务添加到相应的 ZSet 中,并设置任务的执行时间。
b. 每个子节点多个键——分组处理

解释:通过将任务分组到不同的键中,实现任务的分布式处理和高效管理。

实现

  • 任务分组:根据任务类型或优先级,将任务分组到不同的 ZSet 中,方便不同消费者进行分组处理。
  • 并行处理:多个消费者并行处理不同的 ZSet,提高任务处理的吞吐量和系统的整体性能。

示例

假设有多个任务类型,如邮件发送、短信发送和数据处理,可以为每种任务类型创建一个 ZSet:

ZADD email_queue 1672531199 "email_task_1"
ZADD sms_queue 1672531199 "sms_task_1"
ZADD data_processing_queue 1672531199 "data_task_1"

消费者分别监听并处理各自的队列:

# 处理邮件任务的消费者
ZREM email_queue "email_task_1"

# 处理短信任务的消费者
ZREM sms_queue "sms_task_1"

# 处理数据任务的消费者
ZREM data_processing_queue "data_task_1"

五、总结

本文详细介绍了 Redis 的主从复制、哨兵模式、集群模式以及分布式延时队列的原理、实现、优缺点及应用场景。这些机制共同构建了 Redis 高性能、高可用和高可靠性的基础,适用于各种复杂的业务场景。通过合理配置和优化这些机制,用户可以充分发挥 Redis 的优势,保障系统的稳定运行和数据的可靠性。

关键要点

  • 主从复制:实现数据冗余和高可用性,通过同步复制确保数据一致性。
  • 哨兵模式:提供自动故障转移和监控功能,确保系统的持续可用性。
  • 集群模式:支持数据分片和动态扩展,适用于大规模数据和高并发访问的场景。
  • 分布式延时队列:实现高效的任务调度和延时处理,适用于需要定时执行的任务。

应用建议

  • 选择合适的复制机制:根据业务需求和系统规模,选择主从复制、哨兵模式或集群模式,确保数据的高可用性和系统的稳定性。
  • 优化延时队列:通过合理配置 ZSet 和消费者,提升延时任务的处理效率和系统的整体性能。
  • 监控与维护:通过监控工具,实时了解系统的运行状态,及时发现和解决问题,确保 Redis 系统的高效运行。

通过深入理解和合理应用 Redis 的这些高级功能,可以有效提升系统的性能、可靠性和可扩展性,满足各种复杂业务场景的需求。

参考

0voice · GitHub

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

智能家居的“眼睛”:计算机视觉如何让家更智能

引言 在不远的未来,当我们走进家门,灯光自动亮起,空调已经调至最舒适的温度,甚至音乐也播放着我们最喜欢的歌曲。 这一切,都得益于智能家居系统的发展。而在这个系统中,计算机视觉技术扮演着至关重要的角色…

初识MySQL · 数据库

目录 前言: 数据库 简单使用 存储引擎 前言: 本文也是MySQL的第一篇文章了,新的知识点已经出现,怎么能够停止不前,穿越时空……(迪迦奥特曼乱入哈哈哈)。 言归正传,我们在本文的目标有: …

基于SpringBoot+Vue+uniapp的涪陵区特色农产品交易系统的详细设计和实现(源码+lw+部署文档+讲解等)

详细视频演示 请联系我获取更详细的视频演示 项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念,提供了一套默认的配置,让开发者可以更专注于业务逻辑而不…

MATLAB(Octave)混电动力能耗评估

🎯要点 处理电动和混动汽车能耗的后向和前向算法模型(simulink),以及图形函数、后处理函数等实现。构建储能元数据信息:电池标称特性、电池标识符等以及静止、恒定电流和恒定电压等特征阶段。使用电流脉冲或要识别的等效电路模型类型配置阻抗…

day-13面向对象进阶

面向对象进阶部分学习方法: 特点: ​ 逻辑性没有那么强,但是概念会比较多。 ​ 记忆部分重要的概念,理解课堂上讲解的需要大家掌握的概念,多多练习代码。 day13 第一章 复习回顾 1.1 如何定义类 类的定义格式如…

Linux_进程控制

一&#xff1a;进程创建 fork()函数创建新进程 #include <unistd.h> pid_t fork(void); 返回值&#xff1a;自进程中返回0&#xff0c;父进程返回子进程id&#xff0c;出错返回-1 进程调用fork&#xff0c;当控制转移到内核中的fork代码后&#xff0c;内核做&#xff1a;…

KubeSphere部署Elasticsearch+Kibana

演示示例使用的是3.4.1&#xff0c;各版本有名字差异 功能是一样的 1.配置字典 名称&#xff1a;elasticsearch 键名&#xff1a;elasticsearch-conf 值&#xff1a; network.host: 0.0.0.0 http.port: 9200 transport.port: 9300 # head 插件需要这打开这两个配置,解决跨域…

面试:了解 ThreadLocal 内存泄漏需要满足的 2 个条件吗?

欢迎关注公众号 【11来了】&#xff08;文章末尾即可扫码关注&#xff09; &#xff0c;持续 中间件源码、系统设计、面试进阶相关内容 在我后台回复 「资料」 可领取 编程高频电子书&#xff01; 在我后台回复「面试」可领取 30w 字的硬核面试笔记&#xff01; 感谢你的关注&…

Vim工具使用( Linux 网络操作系统 07)

1 概念部分 vim是vimsual interface的简称&#xff0c;它可以执行输出、删除、查找、替换、块操作等众多文本操作&#xff0c;而且用户可以根据自己的需要对其进行定制。这是其他编辑程序所没有的。vim不是一个排版程序&#xff0c;它不像Word或WPS那样可以对字体、格式、段落…

记录 ruoyi-vue-plus在linux 部署遇到的问题

整理 linux 文件不要放在 /, 根目录下&#xff0c;要放在 home 文件夹下。docker 启动mysql 容器&#xff0c;映射的 my.cnf 文件不能设置太高权限&#xff0c;权限太高有安全问题&#xff0c;无法读取。 linux 使用注意事项 docker 文件夹 部署在home文件夹下 总结学习到的…

linux的随机化处理

Linux的随机化处理&#xff08;或称为地址空间布局随机化&#xff0c;ASLR&#xff09;是一种安全特性&#xff0c;旨在提高系统对抗攻击的能力&#xff0c;尤其是缓冲区溢出和代码注入攻击。随机化处理通过改变进程在内存中的布局来减少攻击者利用漏洞的可能性。 随机化处理的…

SOLIDWORKS参数化软件

在产品设计和工程领域&#xff0c;参数化设计是一种革命性的方法&#xff0c;它允许设计者通过定义一系列规则和关系来创建和修改模型。参数化设计的核心在于将设计过程分解为一系列可调整的参数&#xff0c;如尺寸、形状、材料属性等&#xff0c;这些参数之间通过数学关系相互…

【北京迅为】《STM32MP157开发板嵌入式开发指南》- 第四十九章 平台总线总结回顾

iTOP-STM32MP157开发板采用ST推出的双核cortex-A7单核cortex-M4异构处理器&#xff0c;既可用Linux、又可以用于STM32单片机开发。开发板采用核心板底板结构&#xff0c;主频650M、1G内存、8G存储&#xff0c;核心板采用工业级板对板连接器&#xff0c;高可靠&#xff0c;牢固耐…

Anaconda虚拟环境安装cuda和pytorch

首先电脑上要有Anaconda&#xff0c;使用conda创建一个虚拟环境,并激活 conda create yolov8 conda activate yolov8winR输入cmd&#xff0c;在命令窗口输入 NVIDIA-smi可以查看到自己电脑支持的cuda环境&#xff0c;如下图 再打开torch的官网 pytorch官网 查看目前支持的版…

C++ MFC 标准库 加密解密解惑

&#x1f3c6;本文收录于《全栈Bug调优(实战版)》专栏&#xff0c;主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&am…

第五届光学与图像处理国际学术会议(ICOIP 2025)征稿中版面有限!

第五届光学与图像处理国际学术会议&#xff08;ICOIP 2025&#xff09; 2025 5th International Conference on Optics and Image Processing (ICOIP 2025&#xff09; 重要信息 时间地点&#xff1a;2025年4月25-27日丨中国西安 截稿日期&#xff1a;2024年12月16日23:59 …

Java项目-基于Springboot的应急救援物资管理系统项目(源码+说明).zip

作者&#xff1a;计算机学长阿伟 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、ElementUI等&#xff0c;“文末源码”。 开发运行环境 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBoot、Vue、Mybaits Plus、ELementUI工具&#xff1a;IDEA/…

【数据结构与算法】力扣 54. 螺旋矩阵

问题描述 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 示例 1&#xff1a; 输入&#xff1a; matrix [[1,2,3],[4,5,6],[7,8,9]] 输出&#xff1a; [1,2,3,6,9,8,7,4,5]示例 2&#xff1a; 输入&#xff1a; ma…

【C++】deque(空间适配器))

适配器 适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结)&#xff0c;该种模式是将一个类的接口转换成客户希望的另外一个接口。 STL标准库中stack和queue的底层结构 deque原理介绍 deque(双端队列)&#xff1a;是一种…

Visual Studio2022 无法打开源文件

今天在新电脑上安装了Visual Studio2022&#xff0c;但是无法打开多个源文件&#xff0c;网上搜索都是说重新安装Windows SDK 我最开始安装的sdk版本是win11SDK 修改成其他版本后也没有解决问题 最后安装了Windows 10 SDK 10.0.20348.0 这个版本&#xff0c;成功解决问题。 有…