Redis部署架构详解:原理、场景与最佳实践
Redis部署架构详解:原理、场景与最佳实践
Redis作为一种高性能的内存数据库,在现代应用架构中扮演着至关重要的角色。随着业务规模的扩大和系统复杂度的提升,选择合适的Redis部署架构变得尤为重要。本文将详细介绍Redis的各种部署架构模式,包括单点部署、主从复制、哨兵模式、集群模式、Active-Active地理分布式以及Kubernetes云原生部署等,深入剖析其工作原理和底层机制,并提供架构选型指南和典型应用场景比对,帮助读者根据实际需求选择最适合的Redis部署方案。
目录
-
单点部署架构
-
主从复制架构
-
哨兵(Sentinel)架构
-
集群(Cluster)架构
-
Active-Active地理分布式架构
-
Kubernetes云原生部署
-
架构选型指南与场景比对
-
总结与展望
单点部署架构
原理
单点部署是最简单的Redis架构模式,仅包含一个Redis实例,所有的读写操作都在这个实例上进行。
适用场景
-
开发和测试环境
-
数据量较小且对可用性要求不高的应用
-
作为本地缓存使用
-
简单的队列或消息中间件场景
优势
-
部署简单,配置方便
-
资源消耗少
-
没有复制和同步开销
-
延迟最低
劣势
-
单点故障风险高
-
无法横向扩展
-
容量受单机内存限制
-
无法提供高可用性
最佳实践
-
启用持久化:配置AOF或RDB持久化,防止数据丢失
-
合理设置内存上限:避免内存溢出
-
定期备份:设置定时任务备份数据
-
监控系统:部署监控系统及时发现问题
主从复制架构
原理
主从复制架构由一个主节点(master)和一个或多个从节点(replica)组成。主节点处理写操作,从节点通过异步复制方式从主节点同步数据,并提供读服务。
消息同步机制
Redis主从复制是通过三种主要机制实现的:
1. 全量同步(Full Resynchronization)
当从节点首次连接到主节点,或者无法进行部分重同步时,会触发全量同步:
-
RDB文件传输:主节点启动后台进程生成RDB快照文件
-
命令缓冲:同时,主节点会缓冲所有新收到的写命令
-
文件传输:RDB生成完成后,主节点将文件传输给从节点
-
从节点加载:从节点将文件保存到磁盘并加载到内存
-
增量命令同步:主节点发送缓冲的写命令给从节点
全量同步对网络带宽和主节点性能有较大影响,特别是数据量大的情况下。
2. 部分重同步(Partial Resynchronization)
为了避免连接断开后的全量重同步开销,Redis 2.8引入了部分重同步机制:
-
复制偏移量:主从节点各自维护一个复制偏移量,记录复制的字节数
-
复制积压缓冲区:主节点维护一个固定长度的环形缓冲区,默认1MB,记录最近执行的写命令
-
复制ID:每个主节点有一个唯一的复制ID,标识数据集的"版本"
当从节点连接断开后重新连接,会发送PSYNC
命令,包含之前的复制ID和偏移量。主节点检查:
-
如果复制ID匹配且请求的偏移量在复制积压缓冲区内,则只发送缺失的部分命令
-
否则,执行全量同步
配置较大的复制积压缓冲区可以提高部分重同步的成功率:
repl-backlog-size 100mb
3. 心跳检测机制
主从节点间通过心跳机制维持连接和检测状态:
-
PING-PONG交互:主节点每隔10秒向从节点发送PING
-
复制偏移量交换:从节点每秒向主节点报告自己的复制偏移量
-
空闲连接检测:即使没有复制流量,心跳也能保持连接活跃
心跳参数可通过以下配置调整:
repl-ping-replica-period 10
repl-timeout 60
主从复制的工作流程
-
连接建立:从节点通过
slaveof
或replicaof
命令连接到主节点 -
握手协商:从节点发送
PING
,主节点回复PONG
-
同步协商:从节点发送
PSYNC
命令,带上复制ID和偏移量 -
数据同步:根据情况进行全量或部分同步
-
命令传播:主节点持续将写命令发送给从节点
-
定期确认:从节点定期向主节点确认已处理的数据量
复制的一致性保证
Redis复制是异步的,这意味着:
-
主节点不等待从节点确认就返回客户端成功
-
可能存在主从数据不一致的窗口期
-
故障转移时可能丢失已确认的写入
对于需要更强一致性保证的场景,可以使用WAIT
命令实现半同步复制:
WAIT <num-replicas> <timeout>
这会使主节点等待至少N个从节点应用写入后再返回,但仍不是严格的强一致性。
适用场景
-
读多写少的业务场景
-
需要读写分离的应用
-
对数据安全性有一定要求的场景
-
需要提高读性能的应用
优势
-
提高读性能和吞吐量
-
实现读写分离
-
提供数据备份
-
降低主节点负载
劣势
-
不提供自动故障转移
-
主节点故障时需要手动干预
-
写性能受单个主节点限制
-
存在数据一致性延迟
最佳实践
-
配置从节点只读:防止误操作
-
合理设置复制缓冲区:避免全量同步
-
监控复制状态:定期检查复制延迟
-
网络优化:主从节点最好在同一数据中心,减少网络延迟
-
数据安全性考虑:
哨兵(Sentinel)架构
原理
哨兵架构是在主从复制基础上,添加了哨兵系统来监控和管理Redis实例,实现自动故障检测和故障转移。哨兵系统由多个哨兵节点组成,它们通过共识算法协作工作。
哨兵的工作机制
Redis哨兵是一个分布式系统,提供高可用性保障,其核心机制包括:
1. 监控机制
哨兵通过三种方式监控Redis实例:
- 主观下线检测:
- 每个哨兵每秒向所有主从节点发送PING命令
- 如果在
down-after-milliseconds
时间内未收到有效回复,标记为主观下线(SDOWN) - 主观下线只是单个哨兵的判断,不会触发故障转移
- 客观下线检测:
- 当一个哨兵发现主节点主观下线,会询问其他哨兵是否同意
- 如果达到配置的
quorum
数量,则标记为客观下线(ODOWN) - 只有主节点的客观下线才会触发故障转移
- 频道消息监控:
- 哨兵通过Redis的发布/订阅功能相互发现
- 订阅主节点的
__sentinel__:hello
频道获取其他哨兵信息 - 定期(每2秒)在此频道发布自己的信息和主节点状态
2. 哨兵集群的选主与一致性
当主节点被标记为客观下线后,哨兵集群需要选出一个领导者来执行故障转移:
- 领导者选举:
- 基于Raft算法的简化实现
- 每个发现主节点客观下线的哨兵都可能成为候选人
- 候选人向其他哨兵发送
SENTINEL is-master-down-by-addr
命令请求投票 - 每个哨兵在每轮选举中只能投一票
- 第一个获得多数票(N/2+1)的候选人成为领导者
- 选举时间窗口:
- 选举有时间窗口限制,默认为主节点故障确认时间+10秒
- 如果在时间窗口内无法选出领导者,将重新开始选举
- 配置纪元(configuration epoch):
- 每次选举都会增加配置纪元
- 用于防止脑裂和确保配置一致性
- 高纪元的配置会覆盖低纪元的配置
3. 自动故障转移流程
领导者哨兵执行故障转移的具体步骤:
- 从节点筛选:
- 排除断线、主观下线、最近5秒未回复INFO命令的从节点
- 排除与主节点断开连接超过
down-after-milliseconds*10
的从节点
- 从节点排序:
- 按照复制偏移量排序(数据越新越优先)
- 如果偏移量相同,按照运行ID字典序排序
- 从节点晋升:
- 向选中的从节点发送
SLAVEOF NO ONE
命令使其成为主节点 - 等待从节点转变为主节点(最多等待
failover-timeout
时间)
- 重新配置其他从节点:
- 向其他从节点发送
SLAVEOF
命令,指向新主节点 - 更新哨兵的监控配置,将新主节点记录下来
- 配置传播:
- 领导者哨兵将新配置通过发布/订阅传播给其他哨兵
- 所有哨兵更新自己的配置状态
4. 配置提供者功能
哨兵作为服务发现的权威来源:
- 客户端服务发现:
- 客户端连接到哨兵集群获取当前主节点信息
- 使用
SENTINEL get-master-addr-by-name <master-name>
命令 - 支持订阅主节点地址变更通知
- 配置持久化:
- 哨兵会将配置持久化到本地配置文件
- 包括主从关系、运行ID、复制偏移量等信息
- 重启后可以恢复之前的监控状态
- 动态配置更新:
- 哨兵会自动发现主节点的从节点并更新配置
- 当拓扑结构变化时(如添加新的从节点),配置会自动更新
哨兵的高可用保证
哨兵自身的高可用性设计:
- 最少三个哨兵:
- 推荐至少部署3个哨兵实例
- 分布在不同的物理机或可用区
- 多数派原则:
- 故障转移需要多数哨兵(N/2+1)参与决策
- 确保在网络分区时只有一侧能执行故障转移
- 脑裂防护:
- 主节点可配置
min-replicas-to-write
和min-replicas-max-lag
- 当可见的从节点数量不足时,主节点拒绝写入
- 防止网络分区导致的双主情况
适用场景
-
需要高可用性的生产环境
-
对系统自动恢复要求较高的场景
-
中小规模的Redis应用
-
读多写少且需要自动故障转移的场景
优势
-
提供自动故障检测和转移
-
无需人工干预即可恢复服务
-
支持水平扩展的读能力
-
客户端服务发现
劣势
-
架构相对复杂
-
写性能仍受单主节点限制
-
故障转移期间可能有短暂不可用
-
脑裂情况下可能丢失数据
最佳实践
-
部署至少3个哨兵节点:确保高可用性和决策准确性
-
合理设置判断主节点下线的时间阈值:
-
配置客户端连接:使用哨兵地址池而非直接连接Redis实例
-
防止脑裂:配置主节点最小写入副本数
-
哨兵节点分布:部署在不同的物理机或可用区
集群(Cluster)架构
原理
Redis集群通过分片(Sharding)的方式,将数据分散存储在多个节点上,每个节点存储一部分数据。Redis使用哈希槽(Hash Slot)机制,将16384个哈希槽分配给不同的节点,根据键的CRC16值对16384取模来确定数据存储位置。
集群的工作机制
Redis集群通过分片实现数据的水平扩展,其核心机制包括:
1. 数据分片与哈希槽
Redis集群使用哈希槽(Hash Slot)而非一致性哈希来分配数据:
- 16384个哈希槽:
- 集群总共有16384个哈希槽
- 每个主节点负责一部分哈希槽
- 键到槽的映射:
- 使用CRC16算法计算键的哈希值,然后对16384取模
HASH_SLOT = CRC16(key) mod 16384
- 哈希标签:
- 通过
{tag}
语法强制多个键分配到同一个槽 - 例如:
user:{123}:profile
和user:{123}:account
会被分配到同一个槽 - 允许对这些键执行多键操作(如MGET、事务等)
- 槽迁移:
- 添加或删除节点时,只需迁移相应的哈希槽
- 迁移过程是在线的,不影响集群服务
- 迁移期间对相关键的访问会被重定向
2. Gossip协议与集群通信
Redis集群节点间通过Gossip协议进行通信和状态同步:
- 集群总线:
- 每个节点有两个TCP端口:客户端端口和集群总线端口
- 集群总线端口默认是客户端端口+10000
- 节点间通过二进制协议在集群总线上通信
- Gossip消息类型:
PING
:定期发送,包含发送者已知的部分集群状态PONG
:响应PING或主动广播状态更新MEET
:请求节点加入集群FAIL
:广播节点已失效的信息PUBLISH
:用于发布/订阅功能的集群范围消息
- 心跳机制:
- 每个节点每秒随机选择一些节点发送PING
- 优先选择长时间未收到PONG的节点
- 每100毫秒检查是否有节点超过
cluster-node-timeout
未响应
- 信息传播:
- 每个节点的PING/PONG消息包含自己的信息和部分其他节点的信息
- 通过这种方式,信息最终会传播到所有节点
- 关键事件(如节点失效)会加速传播,所有节点主动广播
3. 故障检测与自动故障转移
Redis集群的故障检测和自动故障转移机制:
- 节点失效检测:
- 主观下线(PFAIL):当节点A超过
cluster-node-timeout
时间未响应节点B的PING,B将A标记为PFAIL - 客观下线(FAIL):当超过半数主节点都认为某节点PFAIL时,该节点被标记为FAIL
- FAIL状态会通过Gossip快速传播到整个集群
- 自动故障转移:
- 当主节点被标记为FAIL,其从节点会发起选举
- 第一个发起选举的从节点向所有主节点请求投票
- 每个主节点只能在一个配置纪元内投一票
- 获得多数票的从节点晋升为新主节点
- 新主节点更新集群配置,接管原主节点的哈希槽
- 选举限制:
- 从节点必须与主节点完成过复制(复制偏移量大于0)
- 每个配置纪元内,每个主节点只能投一票
- 如果两秒内没有从节点获得足够票数,将增加配置纪元重新选举
4. 集群一致性与可用性保证
Redis集群在一致性和可用性方面的特性:
- 分区容忍度:
- 集群能够在部分节点失效或网络分区的情况下继续运行
- 只要大多数主节点可以互相通信,集群就保持可用
- 多数派原则:
- 当少于一半的主节点不可达时,集群继续提供服务
- 当多于一半的主节点不可达时,集群停止接受写入
- 一致性保证:
- Redis集群默认提供最终一致性
- 使用异步复制,可能在故障转移时丢失已确认的写入
- 通过
WAIT
命令可以实现更强的一致性保证,但不是严格的强一致性
- 集群配置参数:
cluster-node-timeout
:节点失效超时时间,默认15000毫秒cluster-replica-validity-factor
:从节点有效性因子,默认10cluster-migration-barrier
:迁移屏障,主节点至少要有N个从节点才允许其中一个从节点迁移,默认1cluster-require-full-coverage
:是否要求所有槽都被覆盖才提供服务,默认yes
适用场景
-
大规模数据存储需求
-
需要横向扩展的高吞吐量场景
-
需要高可用性和自动分片的生产环境
-
数据量超过单机内存容量的应用
优势
-
支持水平扩展,理论上无容量限制
-
提供自动故障转移和重新分片
-
高可用性,部分节点故障不影响整体服务
-
高吞吐量,可支持大规模并发访问
劣势
-
架构复杂度高,运维难度大
-
事务和多键操作受限(仅支持同一哈希槽的多键操作)
-
数据一致性保证较弱(异步复制)
-
网络开销较大
最佳实践
-
合理规划节点数量:根据数据量和性能需求确定
-
使用哈希标签:确保相关键存储在同一哈希槽
-
合理配置超时时间:避免频繁故障转移
-
监控集群状态:定期检查集群健康状况
-
规划容量和扩展:预留足够的扩展空间,避免频繁重新分片
Active-Active地理分布式架构
原理
Active-Active架构(也称为多活架构)允许在多个地理位置部署Redis实例,每个位置的实例都可以进行读写操作,并通过冲突解决机制保持数据一致性。Redis Enterprise提供的CRDTs(Conflict-free Replicated Data Types)技术是实现这种架构的关键。
冲突解决机制
Active-Active架构使用无冲突复制数据类型(CRDTs)解决并发写入冲突:
- 最终一致性:
- 所有实例最终会收敛到相同的数据状态
- 不同实例可能暂时看到不同的数据视图
- 冲突解决策略:
- 后写入胜出:对于简单值,最后的写入会覆盖之前的写入
- 集合合并:对于集合类型,合并所有实例的元素
- 计数器累加:对于计数器,合并所有实例的增量
- 因果一致性:
- 使用向量时钟跟踪操作之间的因果关系
- 确保相关操作按正确顺序应用
跨地域复制
Active-Active架构的跨地域复制机制:
- 异步复制:
- 实例间通过异步方式复制更新
- 本地写入立即确认,然后后台传播到其他实例
- 冲突检测与解决:
- 每个实例独立应用本地写入
- 接收到远程更新时,应用冲突解决规则
- 解决后的结果再次传播,确保最终一致性
- 网络优化:
- 压缩复制流量
- 批量传输更新
- 智能路由选择最佳复制路径
适用场景
-
全球化业务需要低延迟访问
-
需要跨区域容灾的关键业务
-
多区域写入需求的应用
-
需要99.999%以上可用性的场景
优势
-
提供跨地域的低延迟访问
-
支持多区域同时写入
-
极高的可用性(99.999%+)
-
自动冲突解决
劣势
-
实现复杂度高
-
需要专业的商业版本支持(如Redis Enterprise)
-
成本较高
-
对网络质量要求高
最佳实践
-
合理规划地理位置:选择靠近用户的区域部署
-
配置冲突解决策略:根据业务需求选择合适的冲突解决方式
-
监控跨区域同步延迟:确保数据一致性在可接受范围
-
网络优化:使用专线或优质网络连接各区域
-
容灾演练:定期进行区域故障模拟和恢复测试
Kubernetes云原生部署
原理
在Kubernetes环境中部署Redis,利用Kubernetes的容器编排能力实现Redis的自动化部署、扩展和管理。可以通过Operator模式(如Redis Operator)或Helm Chart等方式部署各种Redis架构。
部署模式
Kubernetes中Redis的几种部署模式:
- StatefulSet:
- 为Redis提供稳定的网络标识和存储
- 支持有序部署和扩缩容
- 适用于主从复制和哨兵架构
- Operator模式:
- 使用Redis Operator自动化部署和管理
- 支持自动故障转移和配置管理
- 简化复杂架构的运维
- Helm Chart:
- 使用Helm包管理器部署预配置的Redis
- 支持自定义配置和扩展
- 适用于快速部署标准架构
存储考虑
Kubernetes中Redis的存储选项:
- 持久卷(PV)和持久卷声明(PVC):
- 为Redis数据提供持久化存储
- 支持不同的存储类(StorageClass)
- 确保Pod重启后数据不丢失
- 本地存储与网络存储:
- 本地存储提供更好的性能
- 网络存储提供更好的可用性
- 权衡性能与可靠性
适用场景
-
云原生应用架构
-
DevOps和自动化运维环境
-
需要弹性伸缩的场景
-
混合云或多云部署
优势
-
自动化部署和运维
-
弹性伸缩能力
-
与云原生生态系统集成
-
统一的管理平面
劣势
-
增加了系统复杂度
-
性能可能受容器和网络影响
-
需要Kubernetes专业知识
-
状态管理和持久化存储挑战
最佳实践
-
使用StatefulSet部署:确保稳定的网络标识和存储
-
配置持久化存储:使用PersistentVolumeClaim
-
资源限制:设置合理的CPU和内存限制
-
使用Redis Operator:简化复杂架构的部署和管理
-
网络策略:配置适当的网络策略保护Redis服务
架构选型指南与场景比对
选择合适的Redis架构需要考虑多种因素,包括性能需求、可用性要求、数据规模、预算等。以下是一个架构选型指南和典型场景比对:
架构选型决策树
- 单点部署:
- 开发/测试环境
- 数据量小(<5GB)
- 可用性要求低
- 预算有限
- 主从复制:
- 读多写少
- 需要读写分离
- 数据量中等(<10GB)
- 可接受手动故障恢复
- 哨兵架构:
- 需要高可用性
- 数据量中等(<10GB)
- 写操作集中在单点可接受
- 需要自动故障恢复
- 集群架构:
- 大数据量(>10GB)
- 需要横向扩展
- 高吞吐量要求
- 可接受一定的架构复杂性
- Active-Active架构:
- 全球化业务
- 极高可用性要求(99.999%+)
- 多区域写入需求
- 预算充足
- Kubernetes部署:
- 已采用云原生架构
- 需要自动化运维
- 需要与其他云原生应用集成
- 具备Kubernetes专业知识
典型应用场景比对
场景 | 推荐架构 | 理由 |
---|---|---|
电商网站商品缓存 | 集群架构 | 数据量大,读写频繁,需要横向扩展 |
社交媒体消息队列 | 哨兵架构 | 需要高可用性,写入集中,读取分散 |
游戏排行榜 | 主从复制 | 读多写少,数据量适中 |
全球化应用会话存储 | Active-Active架构 | 需要全球低延迟访问,多区域写入 |
微服务架构中的缓存 | Kubernetes部署 | 与其他微服务一致的部署和管理方式 |
日志收集和分析 | 单点或主从 | 临时性数据,可用性要求不高 |
金融交易系统 | 集群+哨兵 | 高可用性和一致性要求,数据安全性高 |
IoT数据处理 | 集群架构 | 大量并发写入,需要横向扩展 |
性能与可用性对比
架构模式 | 读性能 | 写性能 | 可用性 | 一致性 | 复杂度 | 成本 |
---|---|---|---|---|---|---|
单点部署 | 中 | 高 | 低 | 高 | 低 | 低 |
主从复制 | 高 | 中 | 中 | 中 | 中 | 中 |
哨兵架构 | 高 | 中 | 高 | 中 | 中 | 中 |
集群架构 | 极高 | 高 | 高 | 中 | 高 | 高 |
Active-Active | 极高 | 高 | 极高 | 最终一致性 | 极高 | 极高 |
Kubernetes | 取决于底层架构 | 取决于底层架构 | 高 | 取决于底层架构 | 高 | 高 |
总结与展望
Redis提供了多种部署架构选择,从简单的单点部署到复杂的Active-Active地理分布式架构,可以满足不同规模和需求的应用场景。选择合适的架构需要综合考虑性能、可用性、一致性、复杂度和成本等因素。
随着云原生技术的发展,Redis在Kubernetes等环境中的部署变得越来越普遍。同时,Redis模块生态系统的扩展(如RedisJSON、RediSearch、RedisGraph等)也为Redis提供了更多的应用可能性,这些都需要在架构设计时考虑。
未来,随着边缘计算和5G技术的普及,Redis可能会出现更多适合边缘-云协同的部署架构模式。同时,随着AI和机器学习的发展,Redis在向量数据库方面的应用也将带来新的架构需求和挑战。
选择Redis架构时,应始终遵循"适合业务需求"的原则,避免过度设计或选择不足的架构。定期评估和调整架构,以适应业务的发展和变化,是保持Redis高效运行的关键。
参考资料
-
Redis官方文档 - 复制
-
Redis官方文档 - 哨兵
-
Redis官方文档 - 集群
-
Redis官方文档 - Active-Active地理分布式
-
Redis官方文档 - Kubernetes部署
相关文章:

Redis部署架构详解:原理、场景与最佳实践
Redis部署架构详解:原理、场景与最佳实践 Redis作为一种高性能的内存数据库,在现代应用架构中扮演着至关重要的角色。随着业务规模的扩大和系统复杂度的提升,选择合适的Redis部署架构变得尤为重要。本文将详细介绍Redis的各种部署架构模式&a…...
前端开发知识体系全景指南
文章目录 前言前端开发者知识体系清单一、JavaScript基础变量和类型原型和原型链作用域和闭包执行机制语法和API 二、HTML和CSSHTMLCSS手写 三、计算机基础编译原理网络协议设计模式 四、数据结构和算法JavaScript编码能力手动实现前端轮子数据结构算法 五、运行环境浏览器API浏…...

C++哈希表:unordered系列容器详解
本节目标 1.unordered系列关联式容器 2.底层结构 3.模拟实现 4.哈希的应用 5.海量数据处理面试题 unordered系列关联式容器 在c98中,STL提供了底层为红黑树结构的一系列关联式容器,在查询时效率可以达到logN,即最差的情况下需要比较红…...
vue-13(延迟加载路由)
用于性能优化的延迟加载路由 延迟加载路由是优化 Vue.js 应用程序性能的关键技术,尤其是那些具有大量路由的应用程序。通过仅在实际需要时加载路由组件,您可以显著减少应用程序的初始加载时间,从而获得更好的用户体验。这对于网络连接速度较…...
pom.xml 文件中配置你项目中的外部 jar 包打包方式
使用 system 作用域(不推荐,但简单直接) <dependency><groupId>com.test</groupId> <!-- 可自定义,建议与项目相关 --><artifactId>open-sdk</artifactId> <!-- 可自定义,建议…...

WordPress通过简码插入bilibili视频
发布于:Eucalyptus-Blog 一、前言 B站是国内非常受欢迎的视频分享平台,上面不仅内容丰富,而且很多视频制作精良、趣味十足。很多人,比如我,就喜欢将B站的视频通过 iframe 嵌入到自己的网页中,但这段代码又…...

ZLG ZCANPro,ECU刷新,bug分享
文章目录 摘要 📋问题的起因bug分享 ✨思考&反思 🤔摘要 📋 ZCANPro想必大家都不陌生,买ZLG的CAN卡,必须要用的上位机软件。在汽车行业中,有ECU软件升级的需求,通常都通过UDS协议实现程序的更新,满足UDS升级的上位机要么自己开发,要么用CANoe或者VFlash,最近…...

黑马k8s(十七)
一:高级存储 1.高级存储-pv和pvc介绍 2.高级存储-pv 3.高级存储-pvc 最后一个改成5gi pvc3是没有来绑定成功的 pv3没有绑定 删除pod、和pvc,观察状态: 4.高级存储-pc和pvc的生命周期 二:配置存储 1.配置存储-ConfigMap 2.配…...

掌握HttpClient技术:从基础到实战(Apache)
目录 前言 一、Apache HttpClient简介 二、HttpClient基础使用 1. 添加依赖 2. 创建HttpClient实例 3. 发送GET请求 4. 发送POST请求 三、HttpClient高级配置与实战案例 1. 连接池优化 2. 超时与重试配置 3. 文件上传(Multipart) 总结 前言 …...
KEYSIGHT N9320B是德科技N9320B频谱分析仪
KEYSIGHT N9320B是德科技N9320B频谱分析仪 附加功能: 频率范围:9 kHz 至 3 GHz 分辨率带宽:10 Hz 至 1 MHz DANL:-130 dBm,-148 dBm,带可选前置放大器 整体幅度精度:<1.5 dB 最小非零扫…...
EXSI通过笔记本wifi上外网配置
我有一台服务器安装了EXSI,服务器IP地址配置的是192.168.137.2,在EXSI中创建了一个linux虚拟机,ip地址是192.168.137.22。现在我有一个windows笔记本,使用家庭的wife上外网,wife给自动分配了一个192.168.0.106地址&…...
Java异常处理的全面指南
Java异常处理的全面指南 一、Java异常的基础概念1.1 什么是异常1.2 异常类的层次结构 二、Java异常的处理方式2.1 try-catch块2.2 throws关键字2.3 throw关键字 三、自定义异常3.1 自定义受检异常3.2 自定义非受检异常 四、Java异常处理的最佳实践4.1 捕获合适粒度的异常4.2 避…...

sql知识梳理(超全,超详细,自用)
目录 通识 查询的基本语法 数据库(database)操作 表(table)的操作 表中列的操作 索引操作 表中行的操作 insert into语句 update语句 删除语句 select语句 表与表之间的关系 连接查询 子查询 视图 数据备份与还原 …...

[ Qt ] | QPushButton常见用法
目录 绑定键盘快捷键 前面已经说了很多用法了,下面主要说说绑定键盘,设置Icon图片。 绑定键盘快捷键 实现四个按钮,可以使用wsad来控制另一个按钮的上下左右的移动。 #include "widget.h" #include "ui_widget.h"Wid…...
WEB3——为什么做NFT铸造平台?
相必之前看过我的入门项目推荐关于简易NFT铸造平台的文章。会有一些疑惑 WEB3—— 简易NFT铸造平台(ERC-721)-入门项目推荐-CSDN博客 WEB3,我直接在https://nft.storage网站里上传图片不行吗,必须用合约铸造NFT? 我做…...

电脑驱动程序更新工具, 3DP Chip 中文绿色版,一键更新驱动!
介绍 3DP Chip 是一款免费的驱动程序更新工具,可以帮助用户快速、方便地识别和更新计算机硬件驱动程序。 驱动程序更新工具下载 https://pan.quark.cn/s/98895d47f57c 软件截图 软件特点 简单易用:用户界面简洁明了,操作方便,…...

【机器学习基础】机器学习入门核心:数学基础与Python科学计算库
机器学习入门核心:数学基础与Python科学计算库 一、核心数学基础回顾1. 函数与导数2. Taylor公式3. 概率论基础4. 统计量5. 重要定理6. 最大似然估计(MLE)7. 线性代数 二、Python科学计算库精要1. NumPy:数值计算核心2. SciPy&…...

上交具身机器人的视觉运动导航!HTSCN:融合空间记忆与语义推理认知的导航策略
作者:Qiming Liu 1 ^{1} 1, Guangzhan Wang 2 ^{2} 2, Zhe Liu 3 , 4 ^{3,4} 3,4 and Hesheng Wang 1 , 3 , 5 , 6 ^{1,3,5,6} 1,3,5,6单位: 1 ^{1} 1上海交通大学自动化系, 2 ^{2} 2上海交通大学软件学院, 3 ^{3} 3上海交通大学教…...

【C++并发编程01】初识C++并发编程
1、并发是什么 并发是指两个或更多独立的活动同时发生,现实生活中常见的并发场景如边吃饭边看手机。 1.1、计算机中的并发: 计算机领域的并发是指在单个系统里同时执行多个独立的任务,而非顺序的进行一些活动。 我们在电脑上能够边听音乐边和…...

Mysql库的操作和表的操作
Mysql库和表的操作 库的操作1.查看数据库列表2.创建数据库3.使用数据库4.查看当前在那个数据库中5.显示数据库的创建语句6.修改数据库7.删除数据库8.备份和恢复数据库9.查看数据的连接情况(简单来说就是查看有多少人使用你的数据库) 表的操作1.创建表2.查看表结构3.修改表本身(…...

LangChain-结合GLM+SQL+函数调用实现数据库查询(三)
针对 LangChain-结合GLM+SQL+函数调用实现数据库查询(二)-CSDN博客 进一步简化 通过 LangChain 和大语言模型(GLM-4)实现了一个 AI 代理,能够根据自然语言提问自动生成 SQL 查询语句,并连接 MySQL 数据库执行查询,最终返回结果。 整个流程如下: 用户提问 → AI 生成 SQ…...
word文档格式规范(论文格式规范、word格式、论文格式、文章格式、格式prompt)
文章目录 prompt prompt [格式要求] - 字体:中文宋体小四;英文Times New Roman 12pt;标题黑体 - 行距:1.5倍(段前段后0行) - 边距:A4默认(上下2.54cm,左右3.17cm&…...
Ubuntu 桌面版忘记账户密码的重置方法
如果你忘记了 Ubuntu 桌面版的用户密码,可以通过进入恢复模式(Recovery Mode)来重置密码。以下是详细步骤: 一、进入 GRUB 引导菜单 重启计算机:点击关机按钮,选择重启。在启动时按住 Shift 键࿱…...

抖音商城抓包 分析
声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 抓包展示 总结 1.出于安全考虑,本章未…...
[SC]sc_signal_rv的用法和sc_signal相比有什么优势?
sc_signal_rv的用法和sc_signal相比有什么优势? 在 SystemC 中,sc_signal<T> 是最常用的单驱动(single‐driver)信号通道;而 sc_signal_rv<W>(“rv” = resolved vector)则是一种多驱动、带总线(tri-state)分辨功能的信号。下面分几点来说明它们的…...
掌握 FreeRTOS:打造高效嵌入式系统的第一步
实例对比说明: 手机: 点击相机 -> 操作系统 -> 打开摄像头 无操作系统: 相机 -> 打开摄像头也能实现,但方式死板、不支持第三方应用 MCU 对比说明: 裸机开发: MCU -> 直接控制硬件 使用操作系统: MCU -> 操作系统 -> 硬…...

性能优化 - 案例篇:数据一致性
文章目录 Pre引言1. 分布式缓存概念2. Redis 与 Memcached 区别概览3. Spring Boot 中使用 Redis3.1 引入依赖与常用客户端3.2 RedisTemplate 的基本用法3.3 Spring Cache 注解式缓存 4. 秒杀业务简介及挑战5. Lua 脚本实现原子库存扣减5.1 准备阶段:数据预加载5.2 …...

Spring框架学习day6--事务管理
Spring事务管理 Spring事务管理是在AOP的基础上,当我们的方法完全执行成功后,再提交事务,如果方法中有异常,就不提交事务 Spring中的事务管理有两种方式: 1.编程式事务 需要我们在业务代码中手动提交 2.声明式…...

免费酒店管理系统+餐饮系统+小程序点餐——仙盟创梦IDE
酒店系统主屏幕 房间管理 酒店管理系统的房间管理,可实现对酒店所有房间的实时掌控。它能清晰显示房间状态,如已预订、已入住、空闲等,便于高效安排入住与退房,合理分配资源,提升服务效率,保障酒店运营有条…...

Git企业级项目管理实战
目录 1. 准备工作 2. 添加成员 2.1 添加企业成员 2.2 添加项目成员 2.3 添加仓库开发人员 3. 开发场景 - 基于git flow模型的实践 3.1 新需求加入 3.2 修复测试环境 Bug 3.3 修改预发布环境Bug 3.4 修改正式环境 Bug 3.5 紧急修复正式环境 Bug 4. 拓展阅读 4.1 其…...