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

Redis设计与实现——分布式Redis

Redis Sentinel(哨兵)

Sentinel 的工作机制
  • 故障检测(Failure Detection)

    • 主观下线(Subjective Down):单个 Sentinel 实例检测到主节点在30 秒内无响应,标记其为 SDOWN

    • 客观下线(Objective Down):当超过 quorum的 Sentinel 实例确认主节点不可达,标记为 ODOWN,触发故障转移。

  • 领导者选举(Leader Election)

    • Raft 算法:Sentinel 使用类似 Raft 的算法选举领头 Sentinel(Leader),由 Leader 执行故障转移。

    • 选举条件:获得多数 Sentinel 实例的投票(> N/2 + 1,N 为 Sentinel 总数);避免多个 Sentinel 同时发起故障转移。

  • 故障转移(Failover)流程

    • 选择新主节点:Leader Sentinel 根据规则从从节点中选出新主节点:

      优先级(slave-priority 配置);复制偏移量最大(数据最新);运行 ID 字典序最小(最终裁决条件)。

    • 提升新主节点:向目标从节点发送 SLAVEOF NO ONE,使其成为主节点;等待新主节点确认角色切换。

    • 切换从节点复制关系:向其他从节点发送 SLAVEOF 命令,使其复制新主节点。

    • 更新配置:Sentinel 更新监控的主节点地址,并通知客户端。

  • 客户端服务发现

    • 连接流程:客户端向 Sentinel 查询当前主节点地址;客户端直接连接主节点,失败时重试查询。

    • SDK 支持:主流 Redis 客户端库(如 Jedis、Lettuce)内置 Sentinel 集成。

Sentinel 的架构与部署
  • Sentinel 部署模式

    • 推荐配置:至少部署 3 个 Sentinel 实例(奇数个,避免脑裂),分布在独立物理节点。

    • 网络拓扑:Sentinel 实例与 Redis 节点部署在同一网络,避免分区误判;Sentinel 之间通过 Gossip 协议通信,共享节点状态。

  • Sentinel 与 Redis 节点的关系

    • 监控对象:每个 Sentinel 监控 一个主节点及其所有从节点

    • 自动发现:Sentinel 通过主节点获取从节点列表,并持续监控其状态。

Sentinel 的优缺点
  • 优点

    • 自动化容灾:无需人工干预即可完成故障转移。

    • 高可用:Sentinel 自身多实例部署,避免单点故障。

    • 客户端透明:客户端通过 Sentinel 自动发现主节点,业务代码无需硬编码地址。

  • 缺点

    • 数据一致性:异步复制可能导致故障转移后数据丢失(已提交但未同步到从节点的数据)。

    • 复杂度:需部署多个 Sentinel 实例,配置和维护成本较高。

    • 脑裂风险:网络分区可能导致多个主节点并存(需合理配置 quorum 和节点分布)。

生产环境建议
  • 部署最佳实践

    • Sentinel 数量:至少 3 个实例,部署在独立物理节点或可用区。

    • 网络优化:确保 Sentinel 与 Redis 节点间低延迟通信,避免跨地域部署。

    • 监控告警:监控 Sentinel 日志和 INFO Sentinel 输出,关注 odown 事件和故障转移次数。

  • 避免脑裂的配置

    • 合理设置quorum:通常设为 N/2 + 1(N 为 Sentinel 总数)。

    • 调整min-slaves-to-write:主节点需至少同步到指定数量的从节点才接受写操作。

  • 客户端容错

    • 重试策略:客户端应实现重试逻辑,处理故障转移期间的短暂不可用。

    • 多语言 SDK:选择支持 Sentinel 的客户端库(如 Java 的 Jedis、Python 的 redis-py)。

常用命令
  • SENTINEL masters:查看主节点信息。
  • SENTINEL slaves {master}:查看从节点信息。
  • SENTINEL failover {master}:强制触发故障转移(无需ODOWN)。
  • SENTINEL sentinels {master}:查看 Sentinel 节点列表。

Redis集群

集群的架构与数据分片
  • 哈希槽(Hash Slot)分配

    • 分片规则:对键的 CRC16 值取模(CRC16(key) % 16384)确定所属槽位。

    • 哈希标签(Hash Tag):使用 {} 指定部分键名计算哈希值,强制相关键分配到同一槽。

    • 槽分配管理:集群启动时,槽均匀分配到主节点,可通过 CLUSTER ADDSLOTS 手动分配或自动平衡。

  • 节点角色

    • 主节点(Master):负责处理槽的读写请求,参与故障选举。

    • 从节点(Replica):复制主节点数据,主节点故障时接替其槽。

    • 集群模式节点:所有节点默认开启集群模式(cluster-enabled yes)。

  • 集群拓扑

    • 最小部署:至少 3 个主节点(每个主节点至少 1 个从节点),共 6 个节点。

    • 节点发现:节点通过 Gossip 协议交换状态信息(如 MEET 命令将节点加入集群)。

集群的工作机制
  • 客户端请求路由

    • Smart Client:客户端缓存槽与节点的映射关系,直接向目标节点发送请求,若节点返回MOVED重定向错误,更新缓存并重试。

    • Dumb Client:依赖代理(如 Redis Proxy)转发请求,客户端无需感知集群拓扑。

  • 数据读写流程

    • 键存在目标槽:直接由负责该槽的节点处理。

    • 键不在目标槽:返回 MOVED 错误,客户端重定向到正确节点。

    • 槽迁移中:返回 ASK 错误,客户端临时重定向到迁移目标节点。

  • 故障转移(Failover)

    • 主观下线(PFAIL):节点 A 在 cluster-node-timeout(默认 15 秒)内未收到节点 B 的响应,标记 B 为 PFAIL

    • 客观下线(FAIL):超过半数主节点确认节点 B 不可达,标记为 FAIL,触发故障转移。

    • 从节点选举:从节点发起选举,获得多数主节点投票后成为新主节点;接管原主节点的槽,并广播更新集群配置。

  • 数据迁移与平衡

    • 手动迁移:使用 CLUSTER SETSLOT <slot> IMPORTING/MIGRATING 命令迁移槽。

    • 自动平衡:通过 redis-cli --cluster rebalance 自动调整槽分布,均衡负载。

集群的优缺点
  • 优点

    • 水平扩展:支持 TB 级数据和高并发访问。

    • 高可用:自动故障转移,数据多副本存储。

    • 去中心化:无单点故障,节点自治。

  • 缺点

    • 功能限制:不支持跨槽事务、部分命令受限(如 KEYS *)。

    • 运维复杂度:需管理分片、迁移、节点扩缩容。

    • 客户端兼容性:需使用集群感知的客户端或代理。

生产环境建议
  • 部署与配置

    • 节点规划:主节点至少 3 个,跨物理机或可用区部署,从节点数 ≥ 主节点数。

    • 网络优化:确保节点间低延迟通信,避免跨地域部署。

    • 内存管理:监控节点内存使用,避免数据倾斜导致单个节点过载。

  • 数据均衡

    • 预分片:设计键时使用哈希标签,确保相关数据集中。

    • 定期平衡:使用 redis-cli --cluster rebalance 调整槽分布。

  • 监控与故障排查

    • 关键指标

      CLUSTER INFO        # 查看集群健康状态
      CLUSTER NODES       # 查看节点角色、槽分配、状态
      INFO memory         # 监控内存使用
      
    • 日志分析:关注 CLUSTERDOWN 告警和节点超时事件。

常用集群命令
  • CLUSTER NODES:查看集群节点信息。
  • CLUSTER INFO:检查集群状态。
  • CLUSTER FAILOVER:手动故障转移(从节点执行)。
Sentinel 与 Cluster 的对比
特性SentinelCluster
数据分片不支持,需客户端或代理分片。内置分片(16384 槽)。
高可用主从复制 + 故障转移。每个分片主从复制,自动故障转移。
扩展性垂直扩展(主节点性能瓶颈)。水平扩展(支持大规模数据集和高吞吐)。
适用场景中小规模,非分片架构。大规模数据,高并发场景。

Redis复制

主从复制的建立流程
  • Redis 复制的建立分为 全量同步(Full Sync)部分同步(Partial Sync) 两种模式,优先尝试部分同步以减少资源消耗。

  • 从节点初始化连接

    • 命令触发:从节点执行 SLAVEOF <master-ip> <master-port>,开启复制流程。

    • 连接主节点:从节点向主节点发起连接,发送 PING 确认网络可达性。

  • 身份验证(可选):若主节点配置了 requirepass,从节点需发送 AUTH <password> 完成认证。

  • 同步数据集

    • 全量同步(SYNC)

      主节点生成当前数据的 RDB 快照,通过子进程写入磁盘。

      将 RDB 文件发送给从节点,同时缓存期间的写命令至 复制缓冲区(Replication Buffer)

      从节点接收 RDB 并加载到内存,再执行缓冲区中的写命令,追上主节点状态。

    • 部分同步(PSYNC)

      从节点发送 PSYNC <replid> <offset>,携带自身记录的复制 ID 和偏移量。

      主节点检查复制 ID 和偏移量是否匹配历史记录:

      匹配:发送 +CONTINUE,传输从偏移量之后的写命令(利用 复制积压缓冲区)。

      不匹配:触发全量同步(+FULLRESYNC)。

  • 命令传播(Command Propagation):同步完成后,主节点持续将写命令发送给从节点,保持数据一致。

复制的核心机制
  • 复制ID与偏移量

    • 复制ID(Replication ID):主节点的唯一标识,每次主节点重启或角色变更时生成新 ID。

    • 偏移量(Offset):主从节点各自维护一个偏移量,记录已复制的数据量。

  • 复制积压缓冲区(Replication Backlog)

    • 作用:主节点维护一个固定大小的环形缓冲区(默认 1MB),缓存最近的写命令。

    • 触发部分同步:若从节点的偏移量在缓冲区范围内,直接发送增量数据。

    • 配置参数

      repl-backlog-size 1mb     # 缓冲区大小
      repl-backlog-ttl 3600     # 主节点无连接时缓冲区保留时间(秒)
      
  • 心跳检测与断线重连

  • 心跳机制:主从节点定期确认存活状态和复制进度;主节点超时未收到心跳(默认 60 秒)则认为从节点下线。

  • 断线处理:从节点重连后尝试部分同步,失败则触发全量同步。

复制拓扑与高级特性
  • 级联复制(主-从-从)

    • 场景:主节点连接过多从节点时,可通过级联复制分摊压力。

    • 配置:将从节点(Slave A)作为另一从节点(Slave B)的主节点。

  • 延迟副本(Lagging Replica)

    • 作用:人为设置从节点延迟同步,用于误操作恢复(需第三方工具支持)。

    • 实现:通过 slave-repl-delay 配置延迟时间(Redis 自身不原生支持,需外部控制)。

复制的问题与优化
  • 全量同步的资源消耗

    • 问题:大数据集时生成和传输 RDB 文件会阻塞主节点并占用带宽。

    • 优化:增大 repl-backlog-size 减少全量同步概率;使用无盘同步(repl-diskless-sync yes),但需主节点内存充足。

  • 复制延迟

    • 原因:网络延迟、从节点负载过高或主节点写入压力大。

    • 监控:通过 INFO replicationslave_repl_offsetmaster_repl_offset 差值判断延迟。

    • 优化:提升网络带宽,减少主从节点跨地域部署;限制主节点写入速率(如使用管道批量写入)。

  • 数据不一致

    • 原因:主从网络中断导致部分数据未同步。

    • 检测:使用 redis-cli --slave 模拟从节点检查数据差异。

    • 修复:手动触发全量同步(SLAVEOF NO ONE + 重新配置复制)。

相关文章:

Redis设计与实现——分布式Redis

Redis Sentinel&#xff08;哨兵&#xff09; Sentinel 的工作机制 故障检测&#xff08;Failure Detection&#xff09; 主观下线&#xff08;Subjective Down&#xff09;&#xff1a;单个 Sentinel 实例检测到主节点在30 秒内无响应&#xff0c;标记其为 SDOWN。 客观下线…...

【Redis】Hash 哈希

文章目录 常用命令hsethgethmgethexistshkeyshvalshgetallhdelhlenhsetnxhincrbyhincrbyfloat 内部编码应用场景 Redis 存储键值对&#xff0c;也就是 key - value&#xff0c;不过同时也允许 value 也为键值对&#xff0c;但此时为了避免冲突&#xff0c;为 field - value PS…...

【matlab技巧】通过手绘的方法设计二维运动轨迹,附MATLAB程序

代码提供了一种直观的方式来使用鼠标在图形窗口中绘制线条&#xff0c;同时能够记录并显示用户绘制的轨迹坐标。用户通过左键点击绘制点&#xff0c;右键点击结束绘制&#xff0c;适合用于简单的图形交互和数据可视化。 文章目录 代码作用运行MATLAB源代码代码详解 代码作用 这…...

游戏引擎学习第290天:完成分离渲染

game_sim_region.cpp&#xff1a;在BeginSim中移除EntityOverlapsRectangle调用 现在我们接近一个关键点&#xff0c;虽然还没完全结束&#xff0c;但我们已经把所有东西迁移到了一个新概念上——即那些临时创建的控制器结构&#xff0c;称为“脑”&#xff08;brains&#xf…...

uniapp-商城-61-后台 新增商品(添加商品到数据库)

完成商品的布局&#xff0c;完成商品的属性添加&#xff0c;最后的目的还是要完成数据添加&#xff0c;将我们前台的数据添加后台的数据库。 1、界面 2、点击提交完成商品添加 点击下方的提交按钮&#xff0c;将数据添加到数据库。 onSubmit 使用该函数---见3 <view cla…...

深入浅出IIC协议 - 从总线原理到FPGA实战开发 -- 第一篇:I2C总线协议深度解剖

第一篇&#xff1a;I2C总线协议深度解剖 副标题 : 两根线如何征服千亿设备&#xff1f;详解硬件工程师必须掌握的通信奥义 1. 为什么I2C仍是嵌入式经典&#xff1f; 1.1 总线拓扑的哲学 拓扑对比图 SPI需4线N片选 vs I2C仅2线级联 UART点对点 vs I2C多主从架构 成本控制实…...

QT之LayOut布局

文章目录 QFormLayoutQGridLayoutQFormLayout、QGridLayout、QHBoxLayout、QVBoxLayout综合案例用QFormLayout 代替 界面左边部分的QGridLayout QFormLayout #include "widget.h"#include <QFormLayout> #include <QLineEdit>Widget::Widget(QWidget *p…...

ubuntu 24.04安装ros1 noetic

为了后续能够找到安装方法&#xff0c;记录一下&#xff1a; 参考如下链接安装&#xff1a; https://www.reddit.com/r/ROS/comments/158icpy/compiling_ros1_noetic_from_source_on_ubuntu_2204/ 安装步骤如下&#xff1a; 1.获取apt 包 sudo apt-get install python3-ros…...

动态规划-64.最小路径和-力扣(LetCode)

一、题目解析 从左上角到右下角使得数字总和最小且只能向下或向右移动 二、算法原理 1.状态表示 我们需要求到达[i,j]位置时数字总和的最小值&#xff0c;所以dp[i][j]表示&#xff1a;到达[i,j]位置时&#xff0c;路径数字总和的最小值。 2.状态转移方程 到达[i,j]之前要先…...

Python爬虫(29)Python爬虫高阶:动态页面处理与云原生部署全链路实践(Selenium、Scrapy、K8s)

目录 引言&#xff1a;动态爬虫的技术挑战与云原生机遇一、动态页面处理&#xff1a;Selenium与Scrapy的协同作战1.1 Selenium的核心价值与局限1.2 Scrapy-Selenium中间件开发1.3 动态分页处理实战&#xff1a;京东商品爬虫 二、云原生部署&#xff1a;Kubernetes架构设计与优化…...

FauxGen:一款由 CodeBuddy 主动构建的假数据生成器

我正在参加CodeBuddy「首席试玩官」内容创作大赛&#xff0c;本文所使用的 CodeBuddy 免费下载链接&#xff1a;腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 在前端开发中&#xff0c;经常需要一些「假数据」来模拟真实接口&#xff0c;便于开发阶段的界面构建和功能测试…...

chrome 浏览器插件 myTools, 日常小工具。

1. 起因&#xff0c; 目的: 比如&#xff0c;chatgpt, google&#xff0c; 打开网页&#xff0c;就能直接输入文字&#xff0c;然后 grok 就不行&#xff0c;必须用鼠标点一下&#xff0c;才能输入文字。 对我而言&#xff0c;是个痛点&#xff01;写个插件&#xff0c;自动点…...

从代码学习深度学习 - 词嵌入(word2vec)PyTorch版

文章目录 前言1. 为什么需要词嵌入?2. 早期尝试:独热向量 (One-Hot Vectors)独热向量的局限性3. 自监督的 word2vec4. 跳元模型 (Skip-Gram Model)4.1. 训练5. 连续词袋 (CBOW) 模型5.1. 训练总结前言 自然语言处理(NLP)是人工智能领域中一个充满活力和挑战的分支。要让计…...

手写tomcat:基本功能实现(4)

逻辑架构 HTTP 请求与 Socket&#xff1a; 左侧的 “HTTP 请求” 箭头指向 “socket”&#xff0c;表示客户端发送的 HTTP 请求通过 socket 传输到服务器。Socket 负责接收请求&#xff0c;并提取出其中的 请求路径&#xff08;如 /first&#xff09;和 请求方法&#xff08;如…...

String的一些固定程序函数

append reverse length toString...

SECERN AI提出3D生成方法SVAD!单张图像合成超逼真3D Avatar!

SECERN AI提出的3D生成方法SVAD通过视频扩散生成合成训练数据&#xff0c;利用身份保留和图像恢复模块对其进行增强&#xff0c;并利用这些经过优化的数据来训练3DGS虚拟形象。SVAD在新的姿态和视角下保持身份一致性和精细细节方面优于现有最先进&#xff08;SOTA&#xff09;的…...

windows触摸板快捷指南

以下是结构化整理后的触控手势说明&#xff0c;采用清晰的层级划分和标准化表述&#xff1a; **触控手势操作规范****1. 单指操作****2. 双指操作****3. 三指操作****4. 四指操作** **优化说明&#xff1a;** 触控手势操作规范 1. 单指操作 手势功能描述等效操作单击滑动选择…...

Mipsel固件Fuzzing小记

Mipsel固件Fuzzing小记 0x01 准备 1.1 安装必要工具链 首先需要安装 MIPS 交叉编译工具链和相关依赖&#xff1a; sudo apt-get install -y gcc-mipsel-linux-gnu g-mipsel-linux-gnu binwalk qemu-user-static afl这些工具分别用于&#xff1a;交叉编译、固件解包、二进制…...

边缘计算:物联网的“加速器”与“守护者”

引言 随着物联网&#xff08;IoT&#xff09;的快速发展&#xff0c;越来越多的设备接入网络&#xff0c;产生了海量的数据。传统的云计算架构面临着延迟高、带宽不足、数据安全等问题。边缘计算作为一种新兴技术&#xff0c;正在成为解决这些问题的关键手段。本文将探讨边缘计…...

简单网络交换、路由-华三RRPP以太环网

1、RRPP简单介绍 RRPP用来组建环网的链路层协议&#xff0c;工作在二层&#xff0c;比STP收敛更快&#xff0c;同时与STP、Smart-link互斥。很多企业很少应用环网组网&#xff0c;但是小编所在工业生产制造企业在特定工艺的区域对环网应用颇多&#xff0c;RRPP小编还是推荐网工…...

Kotlin变量与数据类型详解

Kotlin 变量与基本数据类型详解 一、变量声明 1. val vs var val&#xff1a;不可变变量&#xff08;只读&#xff09;&#xff0c;类似 Java 的 finalvar&#xff1a;可变变量 val name "Kotlin" // 类型推断为 String var age 25 // 类型推断为 I…...

【Redis】List 列表

文章目录 初识列表常用命令lpushlpushxlrangerpushrpushxlpop & rpoplindexlinsertllen阻塞操作 —— blpop & brpop 内部编码应用场景 初识列表 列表类型&#xff0c;用于存储多个字符串。在操作和实现上&#xff0c;类似 C 的双端队列&#xff0c;支持随机访问(O(N)…...

React中useState中更新是同步的还是异步的?

文章目录 前言一、useState 的基本用法二、useState 的更新机制1. 内部状态管理2. 状态初始化3. 状态更新 三、useState 的更新频率与异步行为1. 异步更新与批量更新2. 为什么需要异步更新&#xff1f; 四、如何正确处理 useState 的更新1. 使用回调函数形式的更新2. 理解异步更…...

Python语法强化

在正式编写第一个Python程序前&#xff0c;我们先复习一下什么是命令行模式和Python交互模式。 命令行模式 在Windows开始菜单选择“Terminal”&#xff0c;就进入到PowerShell命令行模式&#xff0c;它的提示符类似PS C:\>&#xff1a; ┌───────────────…...

FastMCP:为大语言模型构建强大的上下文和工具服务

FastMCP&#xff1a;为大语言模型构建强大的上下文和工具服务 在人工智能快速发展的今天&#xff0c;大语言模型&#xff08;LLM&#xff09;已经成为许多应用的核心。然而&#xff0c;如何让这些模型更好地与外部世界交互&#xff0c;获取实时信息&#xff0c;执行特定任务&am…...

TC3xx学习笔记-UCB BMHD使用详解(二)

文章目录 前言Confirmation的定义Dual UCB: Confirmation StatesDual UCB: Errored State or ECC Error in the UCB Confirmation CodesECC Error in the UCB ContentDual Password UCB ORIG and COPY Re-programming UCB_BMHDx_ORIG and UCB_BMHDx_COPY (x 0-3)BMHD Protecti…...

【Docker】docker compose和docker swarm区别

Docker Swarm 和 Docker Compose 的核心区别&#xff1a; 1. 定位不同 Docker Compose 单机多容器编排&#xff1a;在单个主机上管理多个容器&#xff0c;适合本地开发、测试环境。单节点部署&#xff1a;所有容器运行在同一 Docker 引擎实例上。 Docker Swarm 集群管理工具&…...

Power BI Desktop开发——矩阵相关操作

本篇文章使用2025年5月17日从微软商店下载的最新版Power BI Desktop 目录 1.设置矩阵网格整体大小 2.设置矩阵网格行高 3.设置矩阵网格列宽 4.隐藏矩阵网格的某一列 5.隐藏矩阵网格的某一行 6.设置矩阵网格居中展示 7.号图表的显示设置 8.调整行标题的缩进 9.设置矩阵…...

系统架构设计(九):分布式架构与微服务

基础定义 架构类型定义分布式架构指将系统部署在多个服务器节点上&#xff0c;通过网络协作完成整体功能。强调物理上的分布与任务协作。微服务架构一种分布式架构模式&#xff0c;将系统按照业务维度拆分为多个小型自治服务&#xff0c;每个服务可独立开发、部署、伸缩。 核…...

Linux服务器安全如何加固?禁用不必要的服务与端口如何操作?

保护Linux服务器的安全性对于确保系统的稳定性和数据的保密性至关重要。加固Linux服务器的安全性包括禁用不必要的服务和端口&#xff0c;以减少潜在的攻击面。本文将探讨如何加固Linux服务器的安全性&#xff0c;具体介绍如何禁用不必要的服务和端口&#xff0c;从而提高服务器…...

AgentCPM-GUI,清华联合面壁智能开源的端侧GUI智能体模型

AgentCPM-GUI是什么 AgentCPM-GUI 是由清华大学与面壁智能团队联合开发的一款开源端侧图形用户界面&#xff08;GUI&#xff09;代理&#xff0c;专为中文应用进行优化。基于 MiniCPM-V 模型&#xff08;80 亿参数&#xff09;&#xff0c;该系统能够接收智能手机的屏幕截图&a…...

如何用AI优化简历:自动读取与精华浓缩

在求职过程中&#xff0c;一份出色的简历往往是成功的关键。然而&#xff0c;许多求职者在撰写简历时往往面临诸多挑战&#xff0c;比如如何让简历更突出、如何让招聘者快速了解自己的核心优势等。随着人工智能技术的发展&#xff0c;AI不仅可以帮助我们优化简历内容&#xff0…...

Jackson使用详解

JSON Jackson是java提供处理json数据序列化和反序列的工具类&#xff0c;在使用Jackson处理json前&#xff0c;我们得先掌握json。 JSON数据类型 类型示例说明字符串&#xff08;String&#xff09;"hello"双引号包裹&#xff0c;支持转义字符&#xff08;如 \n&a…...

Node.js 源码概览

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境&#xff0c;它的源码结构相当庞大且复杂。下面我将为你讲解 Node.js 源码的主要结构和关键组成部分。 源码结构 Node.js 的主要源码目录结构如下&#xff1a; node/ ├── lib/ # JavaScript 核心模…...

简单神经网络(ANN)实现:从零开始构建第一个模型

本文将手把手带你用 Python Numpy 实现一个最基础的人工神经网络&#xff08;Artificial Neural Network, ANN&#xff09;。不依赖任何深度学习框架&#xff0c;适合入门理解神经网络的本质。 一、项目目标 构建一个三层神经网络&#xff08;输入层、隐藏层、输出层&#xf…...

Conda 完全指南:从环境管理到工具集成

Conda 完全指南&#xff1a;从环境管理到工具集成 在数据科学、机器学习和 Python 开发领域&#xff0c;环境管理一直是令人头疼的问题。不同项目依赖的库版本冲突、Python 解释器版本不兼容等问题频繁出现&#xff0c;而 Conda 的出现彻底解决了这些痛点。作为目前最流行的跨…...

防范Java应用中的恶意文件上传:确保服务器的安全性

防范Java应用中的恶意文件上传&#xff1a;确保服务器的安全性 在当今数字化时代&#xff0c;Java 应用无处不在&#xff0c;而文件上传功能作为许多应用的核心组件&#xff0c;却潜藏着巨大的安全隐患。恶意文件上传可能导致服务器被入侵、数据泄露甚至服务瘫痪&#xff0c;因…...

CSS- 4.2 相对定位(position: relative)

本系列可作为前端学习系列的笔记&#xff0c;代码的运行环境是在HBuilder中&#xff0c;小编会将代码复制下来&#xff0c;大家复制下来就可以练习了&#xff0c;方便大家学习。 HTML系列文章 已经收录在前端专栏&#xff0c;有需要的宝宝们可以点击前端专栏查看&#xff01; 点…...

Face Over 84.0| 利用AI技术交换照片或视频中的面孔,制作有趣内容

Face Over是一款充满创造力和乐趣的应用程序&#xff0c;它利用AI技术帮助用户交换照片或视频中的面孔&#xff0c;预测未来宝宝的模样&#xff0c;并将照片制作成动画。无论您是想制作有趣的模因、口型同步视频还是探索未来家庭成员的模样&#xff0c;这款应用程序都能满足您的…...

怎么在excel单元格1-5行中在原来内容前面加上固定一个字?

环境&#xff1a; WPS 2024 问题描述&#xff1a; 怎么在excel单元格1-5行中在原来内容前面加上固定一个字&#xff1f; 解决方案&#xff1a; 1.在Excel中&#xff0c;如果您想在单元格的内容前面添加一个固定的字&#xff0c;可以通过以下几种方法实现&#xff1a; 方法…...

AI:人形机器人一定是人的形状吗?

本文将从技术角度分析人形机器人是否必须是人的形状&#xff0c;以及人形与非人形机器人在适用场合、优缺点上的差异。以下是详细解答&#xff1a; 人形机器人一定是人的形状吗&#xff1f; 不&#xff0c;人形机器人&#xff08;Humanoid Robot&#xff09;在技术上通常指外…...

26、思维链Chain-of-Thought(CoT)论文笔记

思维链Chain-of-Thought&#xff08;CoT&#xff09; **1、研究背景与核心目标****2、思维链提示的方法设计**2.1 COT方法2.2 传统方法 3、实验设计与关键数据集3.1 算术推理3.2 常识推理3.3 符号推理 4、关键实验结果1. 算术推理&#xff1a;思维链提示显著提升多步问题解决率…...

golang中的反射示例

文章目录 前言一、通过反射获取底层类型 reflect.typeOf()二、反射获取底层的值 reflect.ValueOf()三、通过反射设置底层值四 、进阶结构体反射示例 前言 反射就像是给程序装上了显微镜&#xff0c;运行时随时查看底层类型以及底层值&#xff0c;根据需要动态读写或调用方法。…...

NX二次开发——设置对象的密度(UF_MODL_set_body_density)

在前几篇博客中我们已经探讨了如何设置实体的密度。在装配环境中&#xff0c;同样可以为组件设置密度。虽然不能直接对组件进行密度设置&#xff0c;但可以通过一种间接方式实现&#xff1a;在装配环境下&#xff0c;利用 UF_ASSEM_set_work_part_quietly() 函数以静默方式将组…...

基于朴素贝叶斯与 LSTM 的假新闻检测模型对比分析

一、引言 在信息爆炸的时代&#xff0c;假新闻的传播对社会产生了诸多负面影响。如何快速、准确地识别假新闻成为了重要的研究课题。本文将对比传统机器学习算法&#xff08;朴素贝叶斯&#xff09;与深度学习模型&#xff08;LSTM&#xff09;在假新闻检测任务中的性能表现&am…...

共享内存【Linux操作系统】

文章目录 共享内存共享内存的原理共享内存相关函数和系统调用--systemV系统调用&#xff1a;shmget系统调用&#xff1a;shmctl系统调用&#xff1a;shmat系统调用&#xff1a;shmdt系统调用&#xff1a;ftok 共享内存相关函数和系统调用--POSIXshm_open-- 创建或打开共享内存对…...

Android核心系统服务:AMS、WMS、PMS 与 system_server 进程解析

1. 引言 在 Android 系统中&#xff0c;ActivityManagerService (AMS)、WindowManagerService (WMS) 和 PackageManagerService (PMS) 是三个最核心的系统服务&#xff0c;它们分别管理着应用的生命周期、窗口显示和应用包管理。 但你是否知道&#xff0c;这些服务并不是独立…...

arduino平台读取鼠标光电传感器

鼠标坏掉了&#xff0c;大抵是修不好了。&#xff08;全剧终—&#xff09; 但是爱动手的小明不会浪费这个鼠标&#xff0c;确认外观没有明显烧毁痕迹后&#xff0c;尝试从电路板上利用光电传感器进行位移的测量&#xff0c;光电传感器&#xff08;型号&#xff1a;FCT3065&am…...

EXO分布式部署deepseek r1

EXO 是一个支持分布式 AI 计算的框架&#xff0c;可以用于在多个设备&#xff08;包括 Mac Studio&#xff09;上运行大语言模型&#xff08;LLM&#xff09;。以下是联调 Mac Studio 512GB 的步骤&#xff1a; 安装 EXO • 从 EXO GitHub 仓库 下载源码或使用 git clone 获取…...

机器学习 KNN算法

KNN算法 1. sklearn机器学习概述2. KNN算法-分类1 样本距离判断2 KNN 算法原理3 KNN缺点4 API5 sklearn 实现KNN示例6 模型保存与加载葡萄酒(load_wine)数据集KNN算法(1)wine.feature_names:(2)wine.target_names(3)KNN算法实现 1. sklearn机器学习概述 获取数据、数据处理、特…...