Redis Cluster 详解
Redis Cluster 详解
1. 为什么需要 Redis Cluster?
Redis 作为一个高性能的内存数据库,在单机模式下可能会遇到以下问题:
- 单机容量受限:Redis 是基于内存存储的,单机的内存资源有限,单实例的 Redis 只能存储有限的数据。
- 单点故障(SPOF):单机 Redis 宕机后,所有缓存数据都无法访问,影响业务可用性。
- 性能瓶颈:单机 Redis 受 CPU 和 I/O 限制,无法支撑高并发的访问需求。
- 扩展性差:单机模式不支持水平扩展,无法通过增加机器来提高存储和计算能力。
Redis Cluster(集群模式) 是 Redis 官方提供的分布式解决方案,主要用于解决以上问题。
2. Redis Cluster 解决了什么问题?有什么优势?
Redis Cluster 解决了以下问题:
- 数据分片存储,突破单机限制
- 通过 哈希槽(hash slot)+ 多节点 的方式,将数据存储到多个 Redis 实例中,实现水平扩展。
- 解决了单机存储受限的问题。
- 无中心化架构,避免单点故障
- 传统的 Redis Sentinel 模式存在 主从架构 + 哨兵管理,但仍然有中心节点。
- Redis Cluster 去中心化,所有节点都存储集群信息,任何节点都可以提供集群状态。
- 解决了单点故障的问题。
- 主从复制 + 自动故障转移
- Redis Cluster 采用主从架构,每个 Master 可以有多个 Slave 备份。
- 如果某个 Master 宕机,Redis Cluster 会自动提升 Slave 为新的 Master,保证集群可用性。
- 动态扩展,支持水平扩容
- Redis Cluster 允许 动态添加 / 删除节点,可以在运行时扩展 Redis 集群,而不会影响业务。
- 解决了 Redis 单机模式扩展性差的问题。
Redis Cluster 的核心优势
特点 | Redis Cluster 解决方案 |
---|---|
存储受限 | 数据分片存储,支持多个节点 |
单点故障 | 无中心化架构,主从复制 |
故障恢复 | 自动故障转移 |
性能瓶颈 | 多主架构,支持并行读写 |
扩展性 | 可动态扩容 / 缩容 |
3. Redis Cluster 是如何分片的?
Redis Cluster 采用 哈希槽(hash slot)+ 数据分片 机制进行数据分片:
-
整个集群有 16384 个哈希槽(slot)。
-
每个 Key 通过哈希算法分配到某个哈希槽:
slot = CRC16(key) % 16384
CRC16
是一种高效的哈希计算方法。
-
哈希槽分布到不同的 Redis 节点:
-
例如:3 个 Redis 节点,每个节点存储部分哈希槽:
节点 A:0 - 5460 节点 B:5461 - 10922 节点 C:10923 - 16383
-
如果有新的节点加入,Redis Cluster 会重新分配哈希槽。
-
4. 为什么 Redis Cluster 的哈希槽是 16384 个?
Redis Cluster 选择 16384 作为固定的哈希槽数量,主要基于以下考虑:
- 兼容 CRC16 计算
- Redis 使用
CRC16
算法计算 Key 的哈希值,并使用 模运算(% 16384) 确定哈希槽。 - 16384(2¹⁴)是 2 的幂,计算高效。
- Redis 使用
- 负载均衡
- 16384 个槽足够均匀地分配到多个节点,避免热点数据集中在某个节点。
- 迁移成本低
- 槽的数量适中,在节点增加/删除时,可以快速迁移哈希槽,减少数据重新分布的影响。
- 适用于大规模集群
- 16384 个槽能支持数百个 Redis 节点,适用于不同规模的集群扩展。
5. 如何确定给定 key 应该分布到哪个哈希槽中?
Redis Cluster 通过 CRC16 哈希算法 计算 key 的哈希槽:
slot = CRC16(key) % 16384
示例:
import crcmodcrc16 = crcmod.predefined.Crc('crc-16')
crc16.update(b'mykey')
slot = crc16.crcValue % 16384
print(slot) # 输出哈希槽号
Redis 客户端会计算 Key 的哈希槽,并直接请求对应的 Redis 节点。
6. Redis Cluster 支持重新分配哈希槽吗?
是的,Redis Cluster 允许动态调整哈希槽分配,以支持扩容或缩容:
- 增加新节点:
- 新增节点后,部分哈希槽会从已有 Master 迁移到新节点。
- 使用
redis-cli --cluster reshard
进行槽位重新分配。
- 删除节点:
- 删除节点时,节点上的哈希槽会迁移到其他节点。
哈希槽迁移过程:
- CLUSTER SETSLOT IMPORTING
- CLUSTER SETSLOT MIGRATING
- 数据同步
- 更新哈希槽信息
7. Redis Cluster 扩容/缩容期间可以提供服务吗?
可以!Redis Cluster 支持在线扩容/缩容,在数据迁移过程中仍然可以提供服务:
- 客户端访问时,可能会遇到 MOVED 重定向
- 例如:客户端请求 Key 时,如果 Key 的哈希槽迁移到了新的节点,返回
MOVED <slot> <new-node-ip>
,客户端会重新请求正确的节点。
- 例如:客户端请求 Key 时,如果 Key 的哈希槽迁移到了新的节点,返回
- 数据在后台迁移,不影响正常读写
- Redis Cluster 采用 渐进式迁移,不会一次性移动所有数据,而是逐步将哈希槽数据转移到新节点。
8. Redis Cluster 中的节点是如何通信的?
Redis Cluster 采用 Gossip 协议 进行节点间通信,保证集群状态一致:
- PING:定期发送心跳检测其他节点的状态。
- PONG:响应
PING
,并附带本节点的状态信息。 - MEET:新节点加入集群时,使用
MEET
命令。 - FAIL:如果多数节点判定某个 Master 故障,则广播
FAIL
信息,触发故障转移。
每个 Redis Cluster 节点都维护整个集群的拓扑信息,即便某些节点故障,集群仍然可以继续运行。
9. Redis Cluster 缓存的数据量太大怎么办?
当 Redis Cluster 的数据量过大时,可以采取以下措施:
- 水平扩展(增加节点):增加新的 Redis 节点,并重新分配哈希槽,使新节点分担数据存储压力。
- 数据淘汰策略:使用
maxmemory-policy
进行数据淘汰,如volatile-lru
、allkeys-lru
等。 - 数据压缩:对于字符串、JSON 数据,可以使用 Snappy、Gzip 等方式进行压缩,减少存储占用。
- 冷热数据分层:将热数据存入 Redis,冷数据存入 MySQL、MongoDB 等持久化存储中。
- 使用 BigKey 拆分:避免存储大 key(如超大列表、集合、哈希),可以拆分为多个小 key 存储。
10. Redis Cluster 的基本架构
一个典型的 Redis Cluster 由多个 Redis 实例组成,每个实例可以是主节点(Master)或从节点(Slave):
- 主节点(Master):负责存储数据并处理客户端请求,每个 Master 管理一部分哈希槽。
- 从节点(Slave):作为 Master 的备份,提供高可用性,Master 宕机时从节点可自动提升为 Master。
- 客户端(Client):连接 Redis Cluster,向不同的 Master 发送请求,并根据哈希槽计算数据存储位置。
Redis Cluster 默认使用 无中心化架构,每个节点既存储数据,又维护整个集群的元数据(比如槽位信息、其他节点状态等)。
总结
问题 | 解答 |
---|---|
为什么需要 Redis Cluster? | 解决单机存储、可用性、性能瓶颈问题。 |
Redis Cluster 如何分片? | 采用 16384 个哈希槽,通过 CRC16(Key) % 16384 计算槽位,并分布到不同节点。 |
为什么是 16384 个哈希槽? | 兼顾计算效率、负载均衡、扩展性和数据迁移成本。 |
Redis Cluster 能动态扩容吗? | 支持在线扩容/缩容,迁移期间不影响业务。 |
Redis Cluster 节点如何通信? | 采用 Gossip 协议,进行 PING/PONG 心跳检测,支持自动故障转移。 |
数据量太大怎么办? | 采用水平扩展、数据淘汰策略、数据压缩、冷热分层等优化方案。 |
基本架构? | 由多个 Master 节点和 Slave 节点组成,每个 Master 负责一部分哈希槽。 |
Redis Cluster 通过数据分片 + 无中心化架构 + 自动故障恢复,实现了高可用、可扩展的分布式 Redis! 🚀
扩展阅读
1. Redis Cluster 的哈希槽为什么是 16384?
Redis Cluster 采用 16384 个哈希槽(slot)来进行数据分片和管理,主要基于以下几个原因:
(1) 兼顾性能与灵活性
- 太少的哈希槽:如果哈希槽数量太少,例如 1024,数据分布会很粗糙,负载均衡效果不佳。
- 太多的哈希槽:如果哈希槽数量过多(如 10^6 级别),每次集群管理和迁移操作都会涉及大量计算,增加开销。
16384 是一个合理的折中方案,它既能保证数据分布的均衡性,又能在扩展和迁移时保持较低的计算和存储成本。
(2) CRC16 计算的高效性
Redis Cluster 采用 CRC16(循环冗余校验)算法计算哈希槽:
Slot = CRC16(Key) % 16384
CRC16 是一种高效的哈希计算方式,16384(2¹⁴)是 2 的幂,可以通过位运算高效计算哈希槽。
(3) 分片和迁移的平衡
-
16384 个槽可以被
多个 Master 节点
平均分配。例如:
- 3 个 Master:每个 Master 约管理 5461 个槽(16384 ÷ 3)。
- 6 个 Master:每个 Master 约 2730 个槽(16384 ÷ 6)。
-
这样,扩容和数据迁移时,不会造成太大的数据重分布,迁移成本较低。
(4) 兼容性
Redis Cluster 设计时考虑到 多个 Redis 实例部署在多个服务器上,16384 适用于不同规模的集群:
- 小规模集群(3~6 个节点)→ 适量的槽可保证均衡分配。
- 大规模集群(数十个节点)→ 16384 个槽依然可以较好地分片。
2. 什么是 Gossip 协议?
(1) Gossip 协议的基本概念
Gossip 协议是一种 去中心化的分布式通信协议,用于 节点之间同步信息,类似于“八卦传播”:
- 每个节点只与部分其他节点通信,而不是全网广播。
- 信息在多个通信轮次后,逐步传播到整个集群。
Redis Cluster 采用 Gossip 协议 来管理节点状态,保持集群的可用性。
(2) Redis Cluster 中的 Gossip 协议
在 Redis Cluster 中,每个节点都会定期向部分节点 发送状态信息,以此来同步集群状态,确保各个节点了解彼此的情况。
Gossip 协议中的几种消息
- PING:节点定期向其他节点发送
PING
消息,询问对方状态。 - PONG:收到
PING
后,节点返回PONG
作为响应,并附带自己的状态信息。 - MEET:新节点加入集群时,使用
MEET
消息通知集群中的其他节点。 - FAIL:如果某个 Master 节点被大多数节点判定为不可用,整个集群会广播
FAIL
消息,触发故障转移。
示例
假设 Redis Cluster 有 6 个节点:
A B C D E F
- A 发送 PING 给 B 和 C。
- B 发送 PING 给 D 和 E。
- C 发送 PING 给 F 和 A。
- 经过几轮传播后,所有节点都可以获取最新的集群状态。
(3) Gossip 协议的优点
- 去中心化:无中心服务器,避免单点故障。
- 高效传播:不像传统的全网广播,Gossip 只向部分节点发送信息,网络开销更小。
- 容错性强:即使部分节点故障,其他节点仍可继续传播信息,保证集群健康。
总结
问题 | 解答 |
---|---|
Redis Cluster 的哈希槽为什么是 16384? | 16384 是 2¹⁴,兼顾数据分片均衡、迁移效率、CRC16 计算高效性。 |
Gossip 协议是什么? | 一种去中心化的分布式通信协议,Redis Cluster 通过 Gossip 进行节点状态同步。 |
Gossip 协议在 Redis Cluster 中的作用? | 负责集群节点状态同步、故障检测(PING/PONG)、节点加入(MEET)、故障传播(FAIL)。 |
Gossip 让 Redis Cluster 实现了 去中心化管理、高效容错,结合 16384 哈希槽的设计,使得 Redis Cluster 既能 高效分片存储,又能 保证集群高可用!
相关文章:
Redis Cluster 详解
Redis Cluster 详解 1. 为什么需要 Redis Cluster? Redis 作为一个高性能的内存数据库,在单机模式下可能会遇到以下问题: 单机容量受限:Redis 是基于内存存储的,单机的内存资源有限,单实例的 Redis 只能…...
Spring(8)——MyBatis入门(2)
一、Mybatis的xml配置文件 Mybatis的开发有两种方式: 注解xml 上一篇博客介绍了用注解的方式操作数据库,这一篇介绍通过xml配置文件的方式操作数据库。 1.1 xml配置文件规则 在Mybatis中使用XML映射文件方式开发,需要符合一定的规范&…...
解析DeepSeek的技术内核:混合专家架构如何重塑AI效能
解析DeepSeek的技术内核:混合专家架构如何重塑AI效能 在当今大型语言模型(LLM)竞争激烈的赛道上,中国AI企业DeepSeek凭借其独特的技术路线脱颖而出。其核心优势之一,便是对混合专家(Mixture of Experts&…...
Android在kts中简单使用AIDL
Android在kts中简单使用AIDL AIDL相信做Android都有所了解,跨进程通信会经常使用,这里就不展开讲解原理跨进程通信的方式了,最近项目换成kts的方式,于是把aidl也换成了统一的方式,其中遇到了很多问题,这里…...
【C++】类和对象(匿名对象)
匿名对象 用 类型(实参) 定义出来的对象叫做匿名对象,相比之前我们定义的 类型 对象名(实参) 定义出来叫有名对象匿名对象生命周期只在当前一行,一般临时定义一个对象当前用一下即可,就可以定义匿名对象。 class A { public:A(int a 0):_a…...
Spring boot 3.4 后 SDK 升级,暨 UI API/MCP 计划
PS 写这篇文章后看到 A Deep Dive Into MCP and the Future of AI Tooling | Andreessen HorowitzWe explore what MCP is, how it changes the way AI interacts with tools, what developers are already building, and the challenges that still need solving. https://a1…...
使用Helm安装、 升级、 回滚Kubernetes应用
前言 在我之前做的项目里,我们对Microk8s微服务的更新是通过自制tar包的方式做的, tar包存储了镜像和YAML文件。 每次升级时,我们需要先删除所有的YAML资源,然后重新创建新的资源。 这种方式存在以下问题: 服务中断:…...
Text-to-SQL将自然语言转换为数据库查询语句
有关Text-To-SQL方法,可以查阅我的另一篇文章,Text-to-SQL方法研究 直接与数据库对话-text2sql Text2sql就是把文本转换为sql语言,这段时间公司有这方面的需求,调研了一下市面上text2sql的方法,比如阿里的Chat2DB,麻…...
gin学习
gin学习笔记,不仅包含了基本的增删查改外,还包括参数传递,上传下载,模版、session与中间件等,方便收藏自习可用 文章目录 获得个请求get打印字符串get请求xmlget请求跳转http方法路由可以通过Context的Param方法来获取…...
【HarmonyOS NEXT】关键资产存储开发案例
在 iOS 开发中 Keychain 是一个非常安全的存储系统,用于保存敏感信息,如密码、证书、密钥等。与文件系统不同,Keychain 提供了更高的安全性,因为它对数据进行了加密,并且只有经过授权的应用程序才能访问存储的数据。那…...
高德终端技术总结:高可用架构如何练成?
前言 高德地图作为国民级应用,特别是出行场景的独特性,要确保在线导航高并发和交通安全级的超稳定性,这对技术团队提出异乎寻常的高要求,无论是终端、云端,还是“终端-云端”之间的连接,都必须实现“高可用…...
STM32八股【3】------RAM和片上FLASH
1、RAM和FLASH构成 1.RAM ┌──────────────────────────┐ │ 栈区 (Stack) │ ← 从RAM顶端向下扩展(存储局部变量、函数调用信息) │--------------------------│ │ 堆区 (Heap) │ ← …...
Apache Doris
Apache Doris介绍 Apache Doris 是一个基于 MPP 架构的高性能、实时的分析型数据库,以极速易用的特点被人们所熟知,仅需亚秒级响应时间即可返回海量数据下的查询结果,不仅可以支持高并发的点查询场景,也能支持高吞吐的复杂分析场…...
Debezium介绍
1.什么是Debezium Debezium 是一个开源的分布式平台,用于捕获数据库的变更事件(CDC,Change Data Capture)。它能够实时捕获数据库中的行级更改,并将这些更改作为事件流发送到消息中间件(如 Apache Kafka&a…...
奇迹科技:蓝牙网关赋能少儿篮球教育的创新融合案例研究
一、引言 本文研究了福建奇迹运动体育科技有限公司(简称‘奇迹科技’)如何利用其创新产品体系和桂花网蓝牙网关M1500,与少儿篮球教育实现深度融合。重点分析其在提升教学效果、保障训练安全、优化个性化教学等方面的实践与成效,为…...
Python散点图(Scatter Plot):高阶分析、散点图矩阵、三维散点图及综合应用
散点图:数据分析的利器 在数据分析领域,散点图是一种直观且强大的可视化工具,广泛应用于揭示变量间的相关性以及识别数据集中的异常值。本文将深入探讨散点图的这两种关键功能,并结合实际案例与Python代码示例,带您全面了解散点图的应用。 一、散点图如何展示变量间的相…...
计算机网络层超全解析:从IP协议到路由算法
🌐 (专业详解生活化类比,逻辑一镜到底) 📖 网络层的核心使命 核心任务:在不同网络间为数据包选择最佳路径,实现端到端通信。 类比:快递公司总部(网络层)根据…...
RoboVQA
RoboVQA:面向机器人技术的多模态长时推理 摘要 我们提出了一种可扩展、自下而上且具有内在多样性的数据收集方案,适用于中长时高级推理任务,其吞吐量比传统的自上而下分步收集方法高2.2倍。通过在3栋办公楼内使用多种实体(机器人、人类、使用抓取工具的人类)执行任意用…...
javascript语法入门
一、变量声明 在JavaScript中,可以使用var、let和const来声明变量。 javascript var name "张三"; let age 20; 二、数据类型 JavaScript中有7种基本数据类型:undefined、null、boolean、string、symbol、number,以及object。…...
前端字段名和后端不一致?解锁 JSON 映射的“隐藏规则” !!!
🚀 前端字段名和后端不一致?解锁 JSON 映射的“隐藏规则” 🌟 嘿,技术冒险家们!👋 今天我们要聊一个开发中常见的“坑”:前端传来的 JSON 参数字段名和后端对象字段名不一致,会发生…...
Java——ArrayList集合
ArrayList:基于动态数组实现,支持随机访问,适合频繁的随机访问操作,但在插入和删除元素时性能较差。 技术层面介绍 所属类库:ArrayList 位于 java.util 包中,它实现了 List 接口,因此具备 Lis…...
基于python+django的图书借阅网站-图书借阅管理系统源码+运行步骤
该系统是基于pythondjango开发的在线图书借阅管理系统。系统适合场景:大学生、课程作业、系统设计、毕业设计。 演示地址 前台地址: http://book.gitapp.cn 后台地址:http://book.gitapp.cn/#/admin 后台管理帐号: 用户名&…...
Flutter运行错误:UG! exception in phase ‘semantic analysis‘
最近在Mac Mini M4上通过Android Studio导入Flutter项目并运行,结果一直跑不起来,错误日志如下: 执行命令查看版本信息: flutter doctor --verbose通过输出信息Java version OpenJDK Runtime Environment (build 21.0.41242208…...
Python-docx库详解:轻松实现Word文档自动化生成与图片尺寸控制
Python-docx库详解:轻松实现Word文档自动化生成与图片尺寸控制 在现代办公自动化的浪潮中,文档处理是一项不可或缺的任务。Python作为一种强大的编程语言,提供了丰富的库来简化这些任务。其中,python-docx库是处理Word文档的有力…...
【NLP 42、实践 ⑪ 用Bert模型结构实现自回归语言模型的训练】
目录 数据文件 一、模型定义 1.模型初始化 代码运行流程 2.前向传播,计算损失 ⭐ 代码运行流程 二、加载语料 代码运行流程 三、 随机生成样本 代码运行流程 四、建立模型 五、采样策略选择 代码运行流程 六、模型效果测试 代码运行流程 七、模型训练 代码运行流程 …...
HTTPS
目录 一 HTTPS是什么 二 加密 三 加密方案 四 CA机构/证书 五 最终方案(对称密钥/非对称密钥/CA证书)和总体流程 一 HTTPS是什么 在应用层存在SSL,TLS(HTTP之下,传输层之上)加密/解密安全协议,如果HTTP经过这个协议,对端也走…...
electron框架(4.0)electron-builde和electron Forge的打包方式
----使用electron-builder打包(需要魔法) --安装electron-builder: npm install electron-builder -D--package.json中进行相关配置: {"name": "video-tools","version": "1.0.0","main&quo…...
SaaS系统的销售微服务与权限微服务边界设计
在设计SaaS系统的销售微服务与权限微服务的边界时,需要结合领域驱动设计(DDD)和微服务拆分原则,确保高内聚、低耦合。以下是结合微服务架构原则、多租户SaaS需求及权限管理场景的完整设计方案,整合了权限服务与销售服务…...
Unity-AI-Deepseek生成的生成模型代码
结果 能用,不是很理想,从左到右,分别是body,眼睛,演睫毛,手指套(如果你知道这是什么)结果不是很理想 (下面代码已包含,修复的切线只能传Vector3参数,Unity2022测试) 你们帮我看看…...
Django REST Framework 请求封装源码解析与实现流程
版本说明: Django: V4.2.20 Django Rest Framework: V3.15.2 一、核心封装流程示意图 #mermaid-svg-qXJLIa9Bx1TCiPSN {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-qXJLIa9Bx1TCiPSN .error-icon{fill…...
简介PyCDE:Python CIRCT Design Entry
简介PyCDE:Python CIRCT Design Entry 引言 在硬件设计和验证领域,随着设计复杂性的增加,传统的方法往往难以满足现代设计的需求。PyCDE(Python CIRCT Design Entry)作为CIRCT项目的一部分,旨在为硬件设计…...
Python实现deepseek接口的调用
简介:DeepSeek 是一个强大的大语言模型,提供 API 接口供开发者调用。在 Python 中,可以使用 requests 或 httpx 库向 DeepSeek API 发送请求,实现文本生成、代码补全,知识问答等功能。本文将介绍如何在 Python 中调用 …...
考研课程安排(自用)
文章目录 408数据结构(王道)计算机组成原理(王道)操作系统(王道)计算机网络(湖科大版) 数学一高等数学(微积分)线性代数和概率论 408 数据结构(王…...
Mybatis操作数据库(注解+xml两个方式)
文章目录 1.个人回顾2.关于mybatis注解的说明3.字段和属性不匹配的解决方案3.1第一个方案3.2第二个方案3.3第三个方案 4.xml路径配置5.xml里面的字段映射 1.个人回顾 刚刚翻看了一下自己的这个之前写的博客,上一次和这个javaee相关的博客还是去年写的,也…...
文心快码 使用体验与介绍
一、文心快码的核心作用 文心快码是百度基于文心大模型开发的智能代码助手,核心价值包括: 代码生成与补全 通用开发:根据注释生成HTML/CSS/JS、Python、Java等代码C专项:生成类定义、STL容器操作、智能指针代码(如st…...
区块链交易
文章目录 交易准备合约和代码逻辑合约compile.jsindex.js 运行 交易 项目来自https://github.com/Dapp-Learning-DAO/Dapp-Learning/blob/main/basic/02-web3js-transaction/README-cn.md 本项目包含对交易进行签名,发送,接收交易回执,验证…...
LeetCode 160 Intersection Of Two Linked Lists 相交链表 Java
题目:找到两个相交列表的起始点,如图c1开始为A和B两个链表的相交点 举例1:8为两个链表的相交点。 注意:相交不止是数值上的相同。 举例2:2为相交点 举例3:没有相交点 解题思路: 相交证明最后一…...
体育直播模板nba英超直播欧洲杯直播模板手机自适应
源码名称:体育直播模板nba英超直播欧洲杯直播模板手机自适应帝国cms 7.5模板 开发环境:帝国cms7.5 空间支持:phpmysql 带软件采集,可以挂着自动采集发布,无需人工操作! 模板特点: 程序伪静态…...
Android Compose 图标按钮深度剖析:从源码到实践(五)
Android Compose 图标按钮深度剖析:从源码到实践 一、引言 在现代 Android 应用开发中,用户界面的交互性和美观性至关重要。图标按钮作为一种常见的 UI 元素,以其简洁直观的特点,在提升用户体验方面发挥着重要作用。Android Com…...
【Dive Into Stable Diffusion v3.5】2:Stable Diffusion v3.5原理介绍
【Dive Into Stable Diffusion v3.5】系列博文: 第1篇:开源项目正式发布——深入探索SDv3.5模型全参/LoRA/RLHF训练第2篇:Stable Diffusion v3.5原理介绍 目录 1 前言1.1 扩散模型的原理1.2 损失函数1.3 加噪流程1.4 推理流程1.5 negative pr…...
WPF 布局舍入(WPF 边框模糊 或 像素错位 的问题)
1. 什么是 WPF 布局舍入? 在 WPF 开发过程中,可能会遇到界面模糊、边框错位、文本渲染不清晰等问题。这些现象通常是由于 WPF 采用 设备无关像素(DIP, Device Independent Pixels),在不同 DPI 设置下,UI 元…...
前端-选中pdf中的文字并使用,显示一个悬浮的翻译按钮(本地pdfjs+iframe)不适用textlayer
使用pdfjs移步– vue2使用pdfjs-dist实现pdf预览(iframe形式,不修改pdfjs原来的ui和控件,dom层可以用display去掉一部分组件) 方案1:获取选择文本内容的最前面的字符坐标的位置(这种写法会导致如果选择超出…...
Mongodb分片模式部署
MongoDB 分片集群部署教程 1. 概述 MongoDB 分片是一种用于处理大规模数据集的集群技术。通过分片,MongoDB 可以将数据分布在多个服务器上,从而提高存储容量和读写性能。本教程将详细介绍如何从零开始部署 MongoDB 分片集群。 介绍 分片集群中主要由三…...
「一起学后端」Nest.js + MySQL 查询方法教学文档
Nest.js MySQL 查询方法教学文档 文章目录 Nest.js MySQL 查询方法教学文档1. 基础 CRUD 操作1.1 创建记录1.2 查询记录1.3 更新记录1.4 删除记录 2. 复杂查询2.1 分页与排序2.2 关联查询(JOIN)2.3 聚合查询2.4 子查询 3. 高级操作3.1 事务处理3.2 Typ…...
基于Spring Boot的企业内管信息化系统的设计与实现(LW+源码+讲解)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
【学习笔记】LLM推理与部署
文章目录 1 [LLMs inference] quantization 量化整体介绍(bitsandbytes、GPTQ、GGUF、AWQ)2 [LLMs inference] quantization 量化整体介绍(bitsandbytes、GPTQ、GGUF、AWQ)3 [LLMs serving] openrouter & vllm host LLM 推理服…...
leetcode-134.加油站
油箱容积无限,要求能环岛,说明总共加起来的油是不少于消耗量的,这是唯一一个决定能否环岛的变量,只要油量够,那么必定有一段路是攒油的路,它供给后续的消耗,使得油箱总是不空。 如果油量足够&am…...
companion object和object 从kotlin转java分析
说明 companion object 中 companion类中的方法是普通的方法 在外部类中生成静态变量,静态companion 对象 object MyClass2 中 类中方法是普通方法 在MyClass2中生成静态变量,静态MyClass2对象, 一 companion object 使用 kotlin转java pa…...
检索增强生成(2)本地PDF 本地嵌入模型
from langchain_community.document_loaders import PyPDFLoader from pathlib import Pathdef load_local_pdf(file_path):if not Path(file_path).exists():raise FileNotFoundError(f"文件 {file_path} 不存在!")loader PyPDFLoader(file_path)try:do…...
关于TVS管漏电流的问题?
问题描述: 在量产的带电池故事机生产中,工厂产线测试电流时,有1台机器电流比正常机器大10mA左右。 原因分析: 1、分析电路原理图,去除可能出现问题的电压或器件(不影响系统),发现…...