Redis集群部署终极指南:架构选型、生产部署与深度优化
第一部分:Redis集群技术全景解析
1.1 Redis集群演进史
- 单机时代(2009-2012):Redis 2.8之前,纯单机模式
- 复制时代(2012-2015):Redis 2.8引入PSYNC改进复制
- 哨兵时代(2015-2017):Redis 3.0正式推出Sentinel
- 集群时代(2017至今):Redis 3.0+推出原生Cluster方案
- 云原生时代(2020+):Redis 6.0支持多线程I/O和TLS
1.2 核心架构对比分析
1.2.1 主从复制架构
关键参数:
repl-backlog-size 1gb # 复制积压缓冲区
repl-diskless-sync yes # 无盘复制
repl-ping-slave-period 10 # 心跳间隔(秒)
1.2.2 Redis Sentinel部署模型
故障转移流程:
- 主观下线(SDOWN):单个Sentinel检测到节点不可用
- 客观下线(ODOWN):多数Sentinel确认节点故障
- 选举Leader Sentinel
- 执行故障转移
1.2.3 Redis Cluster数据分布
数据分片算法:
def slot(key):crc = crc16(key)return crc % 16384
第二部分:生产级部署实践
2.1 硬件规划指南
数据规模 | 内存配置 | 磁盘类型 | 网络要求 | 典型节点数 |
---|---|---|---|---|
< 16GB | 32GB | SSD | 1Gbps | 3-6 |
16-64GB | 64GB | NVMe SSD | 10Gbps | 6-12 |
64-256GB | 128GB | RAID10 NVMe | 10Gbps | 12-24 |
> 256GB | 256GB+ | 分布式存储 | 25/100Gbps | 24+ |
2.2 操作系统调优
# 内核参数调优
echo "net.core.somaxconn = 65535" >> /etc/sysctl.conf
echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf
echo "echo never > /sys/kernel/mm/transparent_hugepage/enabled" >> /etc/rc.local# 资源限制配置
echo "* soft nofile 1000000" >> /etc/security/limits.conf
echo "* hard nofile 1000000" >> /etc/security/limits.conf
2.3 详细部署流程(以Redis 7.0 Cluster为例)
2.3.1 节点初始化
# 创建数据目录
for port in {7000..7005}; domkdir -p /data/redis/${port}chown redis:redis /data/redis/${port}
done# 生成配置文件模板
cat > /etc/redis/redis-cluster.tmpl <<EOF
port ${PORT}
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 15000
appendonly yes
appendfilename "appendonly-${PORT}.aof"
dir /data/redis/${PORT}
masterauth "ComplexPassword123!"
requirepass "ComplexPassword123!"
EOF# 生成各节点配置
for port in {7000..7005}; doexport PORT=$portenvsubst < /etc/redis/redis-cluster.tmpl > /etc/redis/${port}.conf
done
2.3.2 集群引导
# 批量启动节点
for port in {7000..7005}; dosystemctl start redis@${port}
done# 使用redis-cli创建集群
redis-cli --cluster create \127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 \127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 \--cluster-replicas 1 \-a ComplexPassword123!
2.4 集群验证与测试
# 集群健康检查
redis-cli -p 7000 -a ComplexPassword123! cluster info | grep cluster_state# 基准测试(单节点)
redis-benchmark -h 127.0.0.1 -p 7000 -a ComplexPassword123! -t set,get -n 1000000 -c 100 -d 256# 集群版基准测试
redis-benchmark -h 127.0.0.1 -p 7000 -a ComplexPassword123! \--cluster -n 1000000 -c 100 -d 256 \--threads 4
第三部分:高级配置与优化
3.1 持久化策略矩阵
策略组合 | RDB间隔 | AOF配置 | 数据安全性 | 性能影响 | 恢复速度 |
---|---|---|---|---|---|
纯RDB | 1小时 | 关闭 | 低 | 低 | 快 |
混合模式1 | 5分钟 | appendfsync everysec | 中 | 中 | 中 |
混合模式2 | 15分钟 | appendfsync always | 高 | 高 | 慢 |
纯AOF | 关闭 | appendfsync always | 极高 | 极高 | 最慢 |
推荐配置:
# 混合持久化配置
save 900 1
save 300 10
save 60 10000
appendonly yes
appendfilename "appendonly-${PORT}.aof"
appendfsync everysec
aof-use-rdb-preamble yes # Redis 4.0+特性
3.2 内存优化技巧
3.2.1 数据结构优化
# 原始存储方式(消耗更多内存)
SET user:1000:name "张三"
SET user:1000:age 30# 优化方案(使用Hash)
HSET user:1000 name "张三" age 30
3.2.2 内存压缩配置
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
3.3 集群扩展操作
3.3.1 节点扩容流程
# 添加新主节点
redis-cli --cluster add-node \127.0.0.1:7006 127.0.0.1:7000 \--cluster-slots 1024 \-a ComplexPassword123!# 数据重平衡
redis-cli --cluster rebalance \127.0.0.1:7000 \--cluster-weight node1=2 node2=1 \-a ComplexPassword123!
3.3.2 槽位迁移监控
watch -n 1 'redis-cli -p 7000 cluster nodes | grep migrating'
第四部分:生产环境运维体系
4.1 监控指标体系
关键监控项:
-
基础资源:
- 内存使用率(used_memory_rss)
- CPU利用率(used_cpu_sys)
- 网络吞吐量(instantaneous_input_kbps)
-
集群状态:
- 集群健康状态(cluster_state)
- 故障转移次数(failover_count)
-
性能指标:
- 延迟百分位(latency_percentiles)
- 命令统计(commandstats)
Prometheus配置示例:
scrape_configs:- job_name: 'redis-cluster'metrics_path: '/scrape'static_configs:- targets: ['redis-exporter:9121']relabel_configs:- source_labels: [__address__]target_label: instanceregex: (.+):\d+
4.2 灾备方案设计
4.2.1 跨机房部署
4.2.2 备份策略
# RDB备份脚本示例
#!/bin/bash
BACKUP_DIR="/backups/redis/$(date +%Y%m%d)"
mkdir -p $BACKUP_DIR
for port in {7000..7005}; doredis-cli -p $port -a ComplexPassword123! BGSAVEwhile [ "$(redis-cli -p $port -a ComplexPassword123! info persistence | grep rdb_bgsave_in_progress | cut -d: -f2)" -eq 1 ]; dosleep 1donecp /data/redis/${port}/dump.rdb ${BACKUP_DIR}/dump-${port}.rdb
done
4.3 客户端最佳实践
4.3.1 连接池配置(Java示例)
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxTotal(500); // 最大连接数
poolConfig.setMaxIdle(100); // 最大空闲连接
poolConfig.setMinIdle(20); // 最小空闲连接
poolConfig.setMaxWaitMillis(2000); // 获取连接超时时间
poolConfig.setTestOnBorrow(true); // 取连接时测试连通性Set<HostAndPort> nodes = new HashSet<>();
// 添加所有已知集群节点
nodes.add(new HostAndPort("redis1", 7000));
nodes.add(new HostAndPort("redis2", 7001));JedisCluster jedisCluster = new JedisCluster(nodes, 2000, 2000, 5, "ComplexPassword123!", poolConfig
);
4.3.2 重试策略优化
# Python示例:自适应重试机制
def cluster_operation_with_retry(key, operation, max_retries=3):retry_count = 0last_exception = Nonewhile retry_count < max_retries:try:return operation(key)except (ConnectionError, TimeoutError) as e:last_exception = eretry_count += 1time.sleep(min(2 ** retry_count, 10)) # 指数退避raise ClusterOperationError(f"Operation failed after {max_retries} retries") from last_exception
第五部分:典型问题解决方案
5.1 热点Key问题处理
检测方法:
# 使用redis-cli监控命令
redis-cli -p 7000 --hotkeys# 使用监控系统采样
redis-cli -p 7000 monitor | awk '{print $4}' | sort | uniq -c | sort -nr | head -10
解决方案:
- 本地缓存:对热点Key增加本地缓存层
- Key拆分:将大Key拆分为多个子Key
# 原始Key SET popular_item:123 "very_long_value..."# 拆分后 SET popular_item:123:part1 "part1_value" SET popular_item:123:part2 "part2_value"
- 读写分离:通过路由策略将读请求导向从节点
5.2 大Key治理方案
大Key识别工具:
redis-cli --bigkeys -a ComplexPassword123!# 自定义扫描脚本
redis-cli -p 7000 --scan --pattern "*" | while read key; dosize=$(redis-cli -p 7000 memory usage $key)if [ $size -gt 102400 ]; thenecho "BigKey: $key ($size bytes)"fi
done
优化策略:
- 数据结构优化:
# 优化前 SET user:1000:favorites "item1,item2,...,item1000"# 优化后 SADD user:1000:favorites item1 item2 ... item1000
- 分片存储:
# 将大Hash分片存储 def hset_sharded(key, field, value):slot = crc16(field) % 10shard_key = f"{key}:shard{slot}"redis.hset(shard_key, field, value)
5.3 集群脑裂防护
防护配置:
# 主节点最少从节点数
min-replicas-to-write 2
min-replicas-max-lag 10
恢复流程:
- 手动介入确认数据状态
- 选择数据较新的节点作为新主
- 执行
CLUSTER FAILOVER
强制切换 - 同步其他节点数据
第六部分:未来演进与云原生实践
6.1 Redis 7.0新特性
- 多线程I/O:提升网络处理能力
io-threads 4 io-threads-do-reads yes
- 函数式编程:Redis Scripting 2.0
- ACL增强:更细粒度的权限控制
6.2 Kubernetes部署方案
StatefulSet示例:
apiVersion: apps/v1
kind: StatefulSet
metadata:name: redis-cluster
spec:serviceName: redisreplicas: 6selector:matchLabels:app: redistemplate:metadata:labels:app: redisspec:containers:- name: redisimage: redis:7.0ports:- containerPort: 6379name: client- containerPort: 16379name: gossipenv:- name: "REDIS_PASSWORD"value: "ComplexPassword123!"volumeMounts:- name: datamountPath: /datavolumeClaimTemplates:- metadata:name: dataspec:accessModes: [ "ReadWriteOnce" ]storageClassName: "ssd"resources:requests:storage: 100Gi
6.3 混合云部署架构
结语
Redis集群的部署和优化是一个需要持续迭代的过程。随着业务规模的增长,建议:
- 每季度进行容量评估
- 每半年进行架构评审
- 持续监控关键指标
- 建立完善的灾备演练机制
通过本文介绍的全套方案,您应该能够构建出支撑百万级QPS、TB级数据量的高可用Redis集群。记住,没有放之四海而皆准的完美方案,最适合的架构永远是基于业务需求和技术约束的平衡选择。
相关文章:
Redis集群部署终极指南:架构选型、生产部署与深度优化
第一部分:Redis集群技术全景解析 1.1 Redis集群演进史 单机时代(2009-2012):Redis 2.8之前,纯单机模式复制时代(2012-2015):Redis 2.8引入PSYNC改进复制哨兵时代(2015-…...
腾讯云IM即时通讯:开启实时通信新时代
一、引言 在当今数字化浪潮席卷全球的时代,即时通讯已然成为互联网世界中不可或缺的关键元素。无论是个人日常生活中的社交互动,还是企业运营里的高效协作,即时通讯都发挥着举足轻重的作用,已然渗透到人们生活与工作的每一个角落…...
基于Qt的UDP主从服务器设计与实现
概述 一个基于Qt框架实现的UDP主从服务器系统,该系统具备自动主机选举、故障转移和状态同步等关键功能,适用于分布式能源管理系统中的设备通信与协调。 系统核心功能 1. 自动主机选举与故障转移 系统通过优先级机制实现自动主机选举,当主机…...
JVM(8)——详解分代收集算法
JVM 的分代收集算法不是一种具体的垃圾收集算法实现,而是一种指导思想和设计原则,是现代 JVM 垃圾收集器的基石。其核心思想源于对程序运行过程中对象生命周期分布的观察(即弱分代假说)。 核心思想与理论基础:分代假说…...
深入Java面试:从Spring Boot到微服务
深入Java面试:从Spring Boot到微服务 在准备互联网大厂的Java岗位面试时,掌握核心技术栈是关键。本文将从技术栈中选取几个重要的技术点进行探讨,帮助你在面试中脱颖而出。 问题一:Spring Boot的核心特性是什么? 面…...
【软考高级系统架构论文】论无服务器架构及其应用
论文真题 近年来,随着信息技术的迅猛发展和应用需求的快速更迭,传统的多层企业应用系统架构面临越来越多的挑战,已经难以适应这种变化。在这一背景下,无服务器架构(Serverless Architecture) 逐渐流行,它强调业务逻辑由事件触发,具有短暂的生命周期,运行于无状态的轻量…...
Snapchat矩阵运营新策略:亚矩阵云手机打造高效社交网络
1. Snapchat平台特性与风控挑战 Snapchat作为全球领先的即时社交平台,其独特的阅后即焚功能和强社交属性使其风控系统极为严格: 核心风控机制 设备指纹检测:记录设备ID、系统版本、IP地址等硬件信息行为模式分析…...
BGP路由反射器(RR)实验详解,结尾有详细脚本
目录 路由反射器基础概念 实验拓扑与设计 实验配置步骤 配置验证与排错 实验总结 完整配置命令集 路由反射器基础概念 在传统的IBGP网络中,为了防止路由环路,BGP规定通过IBGP学到的路由不能再传递给其他IBGP对等体,这导致所有IBGP路由…...
【JAVA】数组的使用
文章目录 前言一、数组的基本概念1.1 数组的创建和初始化1.2 数组的基本使用 二、数组是引用类型2.1 初始JVM的内存分布JVM内存划分(按功能分区) 2.2 基本类型变量与引用类型变量的区别2.3 再谈引用变量2.4 认识null 三、数组作为函数的参数和返回值四、…...
Python的6万张图像数据集CIFAR-10和CIFAR-100说明
CIFAR-10和CIFAR-100数据集是8000万张微小图像数据集的标记子集。CIFAR-10和CIFAR-100都是由AlexKrizhevsky、VinodNair和GeoffreyHinton创建。数据集说明的网页:https://www.cs.toronto.edu/~kriz/cifar.html 一、CIFAR-10数据集 (一)CIFA…...
CTF--PhP Web解题(走入CTF)
前情提要 分享有趣CTF题目,记录学习过程 题目(带注释,方便理解) <?php // 开启PHP源代码高亮显示,输出当前文件内容(用于调试/展示) highlight_file(__FILE__);// 关闭所有错误报告,防止敏感…...
【Linux仓库】进程概念与基本操作【进程·贰】
🌟 各位看官好,我是! 🌍 Linux Linux is not Unix ! 🚀 今天来学习Linux中进程概念与基本操作。 👍 如果觉得这篇文章有帮助,欢迎您一键三连,分享给更多人哦!…...
Z-Ant开源程序是简化了微处理器上神经网络的部署和优化
一、软件介绍 文末提供程序和源码下载 Z-Ant (Zig-Ant) 是一个全面的开源神经网络框架,专门用于在微控制器和边缘设备上部署优化的 AI 模型。Z-Ant 使用 Zig 构建,为资源受限的硬件上的模型优化、代码生成和实时推理提供端到端…...
面试题-在ts中类型转换的方法
在 TypeScript 中,类型转换主要分为 类型断言(Type Assertion)、类型守卫(Type Guard) 和 类型兼容转换 三种方式。以下是详细分类和示例: 一、类型断言(Type Assertion) 强制编译…...
【论文笔记】【强化微调】T-GRPO:对视频数据进行强化微调
tulerfeng/Video-R1: Video-R1: Reinforcing Video Reasoning in MLLMs [🔥the first paper to explore R1 for video] 1. 引述 在强化微调中,像 GRPO、DAPO 这样的方法都是对文本或者图片进行微调思考,所以这类微调方法不对时序信息做处理&…...
`shallowReactive` 与 `shallowRef`:浅层响应式 API
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 🍚 蓝桥云课签约作者、…...
使用Node.js开发服务端接口
Node.js是一个基于JavaScript的运行时环境,非常适合开发高性能的服务端接口。以下是开发服务端接口的主要方法和步骤。 选择合适的框架 Express、Koa或Fastify是Node.js中常用的框架。Express是最流行的选择,适合快速开发。Koa更轻量,适合需…...
`teleport` 传送 API 的使用:在 Vue 3 中的最佳实践
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 🍚 蓝桥云课签约作者、…...
Linux 多种方式实现行转列
目录 一. 前提二. xargs 实现行转列三. paste 实现行转列四. sed 实现行转列 一. 前提 ⏹之前在这下面篇文章中使用sed命令实现了行专列,本篇文章再介绍几种更加简单的方式。 Linux sed案例 👉 20231126-2.log 110120 SPLREQUEST 内容1 AAA memberID1…...
AI与SEO关键词协同进化
内容概要 人工智能(AI)与搜索引擎优化(SEO)的结合,正深刻变革着关键词策略的制定与执行方式。本文旨在探讨AI技术如何驱动SEO关键词领域的智能化进化,核心在于利用AI强大的数据处理与模式识别能力…...
C# 网络编程-关于HTTP/HTTPS的基础(一)
一、HTTP基础概念 1. 请求-响应模型 HTTP是基于客户端-服务器的无状态协议,流程如下: 客户端(如浏览器)发起请求。服务器接收请求并处理。服务器返回响应,包含状态码、Header和响应体。连接关闭,后续请求…...
题解:P11501 [ROIR 2019] 探险队(Day 2)
前言:这道题 dp 做法找环的部分还没有用拓扑做的,补充一下。 这道题其实很像“上司的舞会”,就是求树上最大独立集。 这里我们把每个人向他讨厌的那个人连边(发现所有点出度均为 1 1 1,所以这是一个基环树࿰…...
读者写者问题与读写锁自旋锁
一、读者写者问题 读者写者问题具有以下特点: 一个交易场所---写者写入数据,读者读数据两种角色---读者,写者三种关系 读者和读者---并发写者和写者---互斥读者和写者---互斥 && 同步 二、读者写者VS生产消费 生产者消费者模型中…...
Sublime text启用vim
打开:首选项 > 设置,在打开的输入框中把 "ignored_packages": ["Vintage"] 修改为 "ignored_packages": [],不忽略Vintage,即为启用Vintage,它是Sublime的内置vim插件。 然后再添加&…...
蚂蚁百宝箱快速创建智能体AI小程序
蚂蚁百宝箱官网https://tbox.alipay.com/community?operationSource1006/ 以下是一篇关于蚂蚁百宝箱快速创建智能体 AI 小程序的图文并茂的博客: 标题:蚂蚁百宝箱快速创建智能体 AI 小程序,开启智能应用新体验 引言 在数字化飞速发展的当…...
【Anconda安装教程】安装到环境配置全流程
目录 前言 一、进入官网下载 二、下载Anconda编辑 三、安装Anconda 四、配置环境变量 五、验证是否安装成功 六、anaconda的使用 情况一:电脑现在没有装python或者现在装的可以卸载掉 情况二:电脑目前装了python,但想保留它 6.1 进…...
Linux系统编程 | IPC对象---信号量
在前面两篇博客文章中,对Linux系统编程部分IPC三大对象中的消息队列和共享内存的知识体系做了一个大致的梳理,在本篇文章中,将对三大IPC对象中的最后一个信号量做一个总结。如果有需要的博客朋友,可以参考我的Linux系统编程专栏参…...
当数据自己会说话:聚类与分类算法全景解析
从金融风控到医疗诊断,两种机器学习技术如何重塑决策逻辑 在人工智能与数据驱动的时代,聚类和分类作为机器学习的两大核心技术,已成为从海量数据中提取价值的必备工具。它们看似相似——都是将数据划分到不同的组中——但内在逻辑和应用场景却…...
哈佛结构(Harvard Architecture)与冯·诺依曼架构(Von Neumann Architecture)
一、基础概念与历史溯源 哈佛结构 起源:1940年代由哈佛大学开发的Mark I计算机首次采用,专为弹道计算优化。核心特征: 物理分离的存储器:程序指令存储在ROM/Flash,数据存储在RAM,两者独立编址。独立总线系统…...
Python内存使用分析工具深度解析与实践指南(下篇)
文章目录 引言6. guppy3 / Heapy功能安装程序示例适用场景注意事项 7. objgraph功能安装程序示例适用场景注意事项 8. memory_profiler功能安装程序示例适用场景注意事项 9. profile(标准库)功能程序示例适用场景注意事项 总结对比表 引言 在Python编程…...
经典控制理论:线性化笔记
一、弹簧阻尼系统 求B点的位置X0,与弹簧形变后的位置X1的关系 ---- 解: 二、直流电动机模型 求输出转速与输入电压的关系 解:...
【StarRocks系列】查询优化
步骤参考官网 分析查询 | StarRocks StarRocks-Profile分析及优化指南 StarRocks-Profile分析及优化指南 - 经验教程 - StarRocks中文社区论坛...
【STM32】STM32的中断系统寄存器NVIC、EXTI
文章目录 中断概述中断的概念为什么需要中断STM32的中断 STM32的中断体系架构NVICNVIC的介绍中断优先级优先级寄存器优先级组 EXTI 中断概述 中断的概念 在主程序运行过程中,出现了特定事件,使得CPU暂停当前正在运行的程序,转而去处理这个事…...
LLM-201: OpenHands与LLM交互链路分析
一、核心交互链路架构 #mermaid-svg-ZBqCSQk1PPDkIXNx {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-ZBqCSQk1PPDkIXNx .error-icon{fill:#552222;}#mermaid-svg-ZBqCSQk1PPDkIXNx .error-text{fill:#552222;strok…...
税务 VR 虚拟体验,带来全新办税感受
在过去,企业办税难题诸多。申报纳税高峰期,办税服务厅人满为患,财务人员需早起取号排队,耗费大量时间。传统办税流程复杂,涉及多环节和部门,资料繁多,若准备不全或有误就得重新准备,…...
【Linux 驱动中断】
Linux 驱动中断 一、GIC 控制器:硬件中断的枢纽二、GPIO 中断:设备交互的常见入口三、Tasklet 与软中断:高效的异步处理机制3.1 Tasklet3.2 软中断 四、工作队列:灵活的任务处理框架4.1 共享工作队列4.2 自定义工作队列4.3 延迟工…...
ali 轻量服务器安装nginx
# Ubuntu sudo apt install nginx-light # 精简版 # CentOS sudo yum install nginx #启动并设置开机自启 sudo systemctl daemon-reload sudo systemctl start nginx sudo systemctl enable nginx #验证安装 nginx -v curl -I 127.0.0.1 #常用命令: # 重新加载配…...
2025年- H83-Lc191--139.单词拆分(动态规划)--Java版
1.题目描述 2.思路 字符串s是一个容器(一个背包),wordDict词典是物品,这里面的每个物品我们可以使用多次。 动归五部曲 (1)字符串的长度为i,dp[i]true。 dp[s.size] dp[0]代表空字符串 &#x…...
【好用但慎用】Windows 系统中将所有 WSL 发行版从 C 盘迁移到 非系统 盘的完整笔记(附 异常处理)
🚀 将所有 WSL 发行版从 C 盘迁移到 I 盘的完整教程(含 Podman / NVIDIA Workbench / Ubuntu 等) 【无标题】使用 Chocolatey 安装 WSL 管理工具 LxRunOffline-CSDN博客 免责声明 重要提示 在执行 WSL 迁移操作前,请务必仔细阅读…...
贪心算法思路详解
文章目录 一、贪心算法是什么?二、贪心算法原理三、再谈背包问题四、活动选择问题五、拟阵理论总结 一、贪心算法是什么? 贪心算法与动态规划算法一样是用于求解最优化类问题的算法,其本质上是基于动态规划算法的改进算法,其所求…...
Keil 安装 CMSIS-FreeRTOS 失败解决方案
一、问题现象 在 Keil 中安装 CMSIS-FreeRTOS 时出现以下错误: (1) 通过内置工具安装: (2)通过官网安装: 二、核心原因 Keil 版本过低,与 CMSIS-FreeRTOS 包不兼容: …...
Python打卡DAY33
DAY33:MLP神经网络的训练 恩师浙大疏锦行 知识点: PyTorch和cuda的安装查看显卡信息的命令行命令(cmd中使用)cuda的检查简单神经网络的流程 数据预处理(归一化、转换成张量)模型的定义 继承nn.Module类定义…...
RJ45 网口实现千兆传输速率(1Gbps)的原理,涉及物理层传输技术、线缆标准、信号调制及网络协议等多方面的协同设计。以下从技术维度展开详细解析:
一、千兆以太网的标准与物理层基础 1. 标准规范 千兆以太网遵循 IEEE 802.3ab(针对双绞线)和 IEEE 802.3z(针对光纤)标准,其中 RJ45 接口对应双绞线场景,核心是通过四对双绞线(CAT5e/CAT6 线缆…...
leetcode hot 100之:二叉树的层序遍历
层序遍历和前中后序遍历不一样,大家可以想象的是:前中后序遍历可以用递归,因为他是以子树为标准来选择的;那层序怎么办呢?怎么才能一层层地遍历呢? void First(TreeNode* root) {printf("%d",ro…...
深入解析BERT:语言分类任务的革命性引擎
“BERT的出现,如同在自然语言处理领域投下了一颗认知炸弹——它让机器真正学会了’联系上下文’。” ——自然语言处理研究者普遍共识 在自然语言处理(NLP)领域,2018年诞生的BERT(Bidirectional Encoder Representatio…...
Pycharm中Jupyter Notebook 插件常用快捷键
bg:Jupyter跟LINQPad很像,都是方便写的时候看数据用 快捷键功能Shift Enter执行当前单元格,并跳转到下一个单元格Ctrl Enter执行当前单元格,不跳转(留在当前单元格)Alt Enter执行当前单元格,…...
【Python】Excel表格操作:ISBN转条形码
一、效果 原始文件: 输出文件: 二、代码 import os import logging from openpyxl import load_workbook from openpyxl.drawing.image import Image as ExcelImage from barcode import EAN13 from barcode.writer import ImageWriterlogging.basicCo…...
大数据Hadoop集群搭建
文章目录 大数据Hadoop集群搭建一、VMware准备Linux虚拟机二、VMware虚拟机系统设置1、主机名、IP、SSH免密登录2、JDK环境部署3、防火墙、SELinux、时间同步 三、VMware虚拟机集群上部署HDFS集群1、集群规划2、上传&解压3、Hadoop安装包目录结构4、修改配置文件࿰…...
饼图:数据可视化的“切蛋糕”艺术
饼图,作为数据可视化家族中最经典、最易识别的成员之一,其核心功能如同其名——像切分蛋糕一样,直观展示一个整体(100%)被划分为若干组成部分的比例关系。 往期文章推荐: 20.用Mermaid代码画ER图:AI时代的…...
mysql server层做了什么
服务器处理客户端请求 服务器程序在处理来自客户端的查询请求时,大致需要分为3部分:连接管理、解析与优化、存储引擎。 连接管理 每当有一个客户端进程连接到服务器进程时,服务器进程都会创建一个线程专门处理与这个客户端的交互ÿ…...