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

Redis Cluster 详解

Redis Cluster 详解

1. 为什么需要 Redis Cluster?

Redis 作为一个高性能的内存数据库,在单机模式下可能会遇到以下问题:

  1. 单机容量受限:Redis 是基于内存存储的,单机的内存资源有限,单实例的 Redis 只能存储有限的数据。
  2. 单点故障(SPOF):单机 Redis 宕机后,所有缓存数据都无法访问,影响业务可用性。
  3. 性能瓶颈:单机 Redis 受 CPU 和 I/O 限制,无法支撑高并发的访问需求。
  4. 扩展性差:单机模式不支持水平扩展,无法通过增加机器来提高存储和计算能力。

Redis Cluster(集群模式) 是 Redis 官方提供的分布式解决方案,主要用于解决以上问题。


2. Redis Cluster 解决了什么问题?有什么优势?

Redis Cluster 解决了以下问题:

  1. 数据分片存储,突破单机限制
    • 通过 哈希槽(hash slot)+ 多节点 的方式,将数据存储到多个 Redis 实例中,实现水平扩展
    • 解决了单机存储受限的问题。
  2. 无中心化架构,避免单点故障
    • 传统的 Redis Sentinel 模式存在 主从架构 + 哨兵管理,但仍然有中心节点。
    • Redis Cluster 去中心化,所有节点都存储集群信息,任何节点都可以提供集群状态。
    • 解决了单点故障的问题。
  3. 主从复制 + 自动故障转移
    • Redis Cluster 采用主从架构,每个 Master 可以有多个 Slave 备份。
    • 如果某个 Master 宕机,Redis Cluster 会自动提升 Slave 为新的 Master,保证集群可用性。
  4. 动态扩展,支持水平扩容
    • Redis Cluster 允许 动态添加 / 删除节点,可以在运行时扩展 Redis 集群,而不会影响业务。
    • 解决了 Redis 单机模式扩展性差的问题。

Redis Cluster 的核心优势

特点Redis Cluster 解决方案
存储受限数据分片存储,支持多个节点
单点故障无中心化架构,主从复制
故障恢复自动故障转移
性能瓶颈多主架构,支持并行读写
扩展性可动态扩容 / 缩容

3. Redis Cluster 是如何分片的?

Redis Cluster 采用 哈希槽(hash slot)+ 数据分片 机制进行数据分片:

  1. 整个集群有 16384 个哈希槽(slot)。

  2. 每个 Key 通过哈希算法分配到某个哈希槽:

    • slot = CRC16(key) % 16384
    • CRC16 是一种高效的哈希计算方法。
  3. 哈希槽分布到不同的 Redis 节点:

    • 例如:3 个 Redis 节点,每个节点存储部分哈希槽:

      节点 A:0 - 5460
      节点 B:5461 - 10922
      节点 C:10923 - 16383
      
    • 如果有新的节点加入,Redis Cluster 会重新分配哈希槽。


4. 为什么 Redis Cluster 的哈希槽是 16384 个?

Redis Cluster 选择 16384 作为固定的哈希槽数量,主要基于以下考虑:

  1. 兼容 CRC16 计算
    • Redis 使用 CRC16 算法计算 Key 的哈希值,并使用 模运算(% 16384) 确定哈希槽。
    • 16384(2¹⁴)是 2 的幂,计算高效。
  2. 负载均衡
    • 16384 个槽足够均匀地分配到多个节点,避免热点数据集中在某个节点。
  3. 迁移成本低
    • 槽的数量适中,在节点增加/删除时,可以快速迁移哈希槽,减少数据重新分布的影响。
  4. 适用于大规模集群
    • 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 进行槽位重新分配。
  • 删除节点
    • 删除节点时,节点上的哈希槽会迁移到其他节点。

哈希槽迁移过程:

  1. CLUSTER SETSLOT IMPORTING
  2. CLUSTER SETSLOT MIGRATING
  3. 数据同步
  4. 更新哈希槽信息

7. Redis Cluster 扩容/缩容期间可以提供服务吗?

可以!Redis Cluster 支持在线扩容/缩容,在数据迁移过程中仍然可以提供服务:

  1. 客户端访问时,可能会遇到 MOVED 重定向
    • 例如:客户端请求 Key 时,如果 Key 的哈希槽迁移到了新的节点,返回 MOVED <slot> <new-node-ip>,客户端会重新请求正确的节点。
  2. 数据在后台迁移,不影响正常读写
    • 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-lruallkeys-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 协议中的几种消息
  1. PING:节点定期向其他节点发送 PING 消息,询问对方状态。
  2. PONG:收到 PING 后,节点返回 PONG 作为响应,并附带自己的状态信息。
  3. MEET:新节点加入集群时,使用 MEET 消息通知集群中的其他节点。
  4. 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 协议的优点
  1. 去中心化:无中心服务器,避免单点故障。
  2. 高效传播:不像传统的全网广播,Gossip 只向部分节点发送信息,网络开销更小。
  3. 容错性强:即使部分节点故障,其他节点仍可继续传播信息,保证集群健康。

总结

问题解答
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&#xff1f; Redis 作为一个高性能的内存数据库&#xff0c;在单机模式下可能会遇到以下问题&#xff1a; 单机容量受限&#xff1a;Redis 是基于内存存储的&#xff0c;单机的内存资源有限&#xff0c;单实例的 Redis 只能…...

Spring(8)——MyBatis入门(2)

一、Mybatis的xml配置文件 Mybatis的开发有两种方式&#xff1a; 注解xml 上一篇博客介绍了用注解的方式操作数据库&#xff0c;这一篇介绍通过xml配置文件的方式操作数据库。 1.1 xml配置文件规则 在Mybatis中使用XML映射文件方式开发&#xff0c;需要符合一定的规范&…...

解析DeepSeek的技术内核:混合专家架构如何重塑AI效能

解析DeepSeek的技术内核&#xff1a;混合专家架构如何重塑AI效能 在当今大型语言模型&#xff08;LLM&#xff09;竞争激烈的赛道上&#xff0c;中国AI企业DeepSeek凭借其独特的技术路线脱颖而出。其核心优势之一&#xff0c;便是对混合专家&#xff08;Mixture of Experts&…...

Android在kts中简单使用AIDL

Android在kts中简单使用AIDL AIDL相信做Android都有所了解&#xff0c;跨进程通信会经常使用&#xff0c;这里就不展开讲解原理跨进程通信的方式了&#xff0c;最近项目换成kts的方式&#xff0c;于是把aidl也换成了统一的方式&#xff0c;其中遇到了很多问题&#xff0c;这里…...

【C++】类和对象(匿名对象)

匿名对象 用 类型(实参) 定义出来的对象叫做匿名对象&#xff0c;相比之前我们定义的 类型 对象名(实参) 定义出来叫有名对象匿名对象生命周期只在当前一行&#xff0c;一般临时定义一个对象当前用一下即可&#xff0c;就可以定义匿名对象。 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应用

前言 在我之前做的项目里&#xff0c;我们对Microk8s微服务的更新是通过自制tar包的方式做的, tar包存储了镜像和YAML文件。 每次升级时&#xff0c;我们需要先删除所有的YAML资源&#xff0c;然后重新创建新的资源。 这种方式存在以下问题&#xff1a; 服务中断&#xff1a;…...

Text-to-SQL将自然语言转换为数据库查询语句

有关Text-To-SQL方法&#xff0c;可以查阅我的另一篇文章&#xff0c;Text-to-SQL方法研究 直接与数据库对话-text2sql Text2sql就是把文本转换为sql语言&#xff0c;这段时间公司有这方面的需求&#xff0c;调研了一下市面上text2sql的方法&#xff0c;比如阿里的Chat2DB,麻…...

gin学习

gin学习笔记&#xff0c;不仅包含了基本的增删查改外&#xff0c;还包括参数传递&#xff0c;上传下载&#xff0c;模版、session与中间件等&#xff0c;方便收藏自习可用 文章目录 获得个请求get打印字符串get请求xmlget请求跳转http方法路由可以通过Context的Param方法来获取…...

【HarmonyOS NEXT】关键资产存储开发案例

在 iOS 开发中 Keychain 是一个非常安全的存储系统&#xff0c;用于保存敏感信息&#xff0c;如密码、证书、密钥等。与文件系统不同&#xff0c;Keychain 提供了更高的安全性&#xff0c;因为它对数据进行了加密&#xff0c;并且只有经过授权的应用程序才能访问存储的数据。那…...

高德终端技术总结:高可用架构如何练成?

前言 高德地图作为国民级应用&#xff0c;特别是出行场景的独特性&#xff0c;要确保在线导航高并发和交通安全级的超稳定性&#xff0c;这对技术团队提出异乎寻常的高要求&#xff0c;无论是终端、云端&#xff0c;还是“终端-云端”之间的连接&#xff0c;都必须实现“高可用…...

STM32八股【3】------RAM和片上FLASH

1、RAM和FLASH构成 1.RAM ┌──────────────────────────┐ │ 栈区 (Stack) │ ← 从RAM顶端向下扩展&#xff08;存储局部变量、函数调用信息&#xff09; │--------------------------│ │ 堆区 (Heap) │ ← …...

Apache Doris

Apache Doris介绍 Apache Doris 是一个基于 MPP 架构的高性能、实时的分析型数据库&#xff0c;以极速易用的特点被人们所熟知&#xff0c;仅需亚秒级响应时间即可返回海量数据下的查询结果&#xff0c;不仅可以支持高并发的点查询场景&#xff0c;也能支持高吞吐的复杂分析场…...

Debezium介绍

1.什么是Debezium Debezium 是一个开源的分布式平台&#xff0c;用于捕获数据库的变更事件&#xff08;CDC&#xff0c;Change Data Capture&#xff09;。它能够实时捕获数据库中的行级更改&#xff0c;并将这些更改作为事件流发送到消息中间件&#xff08;如 Apache Kafka&a…...

奇迹科技:蓝牙网关赋能少儿篮球教育的创新融合案例研究

一、引言 本文研究了福建奇迹运动体育科技有限公司&#xff08;简称‘奇迹科技’&#xff09;如何利用其创新产品体系和桂花网蓝牙网关M1500&#xff0c;与少儿篮球教育实现深度融合。重点分析其在提升教学效果、保障训练安全、优化个性化教学等方面的实践与成效&#xff0c;为…...

Python散点图(Scatter Plot):高阶分析、散点图矩阵、三维散点图及综合应用

散点图:数据分析的利器 在数据分析领域,散点图是一种直观且强大的可视化工具,广泛应用于揭示变量间的相关性以及识别数据集中的异常值。本文将深入探讨散点图的这两种关键功能,并结合实际案例与Python代码示例,带您全面了解散点图的应用。 一、散点图如何展示变量间的相…...

计算机网络层超全解析:从IP协议到路由算法

&#x1f310; &#xff08;专业详解生活化类比&#xff0c;逻辑一镜到底&#xff09; &#x1f4d6; 网络层的核心使命 核心任务&#xff1a;在不同网络间为数据包选择最佳路径&#xff0c;实现端到端通信。 类比&#xff1a;快递公司总部&#xff08;网络层&#xff09;根据…...

RoboVQA

RoboVQA:面向机器人技术的多模态长时推理 摘要 ​ 我们提出了一种可扩展、自下而上且具有内在多样性的数据收集方案,适用于中长时高级推理任务,其吞吐量比传统的自上而下分步收集方法高2.2倍。通过在3栋办公楼内使用多种实体(机器人、人类、使用抓取工具的人类)执行任意用…...

javascript语法入门

一、变量声明 在JavaScript中&#xff0c;可以使用var、let和const来声明变量。 javascript var name "张三"; let age 20; 二、数据类型 JavaScript中有7种基本数据类型&#xff1a;undefined、null、boolean、string、symbol、number&#xff0c;以及object。…...

前端字段名和后端不一致?解锁 JSON 映射的“隐藏规则” !!!

&#x1f680; 前端字段名和后端不一致&#xff1f;解锁 JSON 映射的“隐藏规则” &#x1f31f; 嘿&#xff0c;技术冒险家们&#xff01;&#x1f44b; 今天我们要聊一个开发中常见的“坑”&#xff1a;前端传来的 JSON 参数字段名和后端对象字段名不一致&#xff0c;会发生…...

Java——ArrayList集合

ArrayList&#xff1a;基于动态数组实现&#xff0c;支持随机访问&#xff0c;适合频繁的随机访问操作&#xff0c;但在插入和删除元素时性能较差。 技术层面介绍 所属类库&#xff1a;ArrayList 位于 java.util 包中&#xff0c;它实现了 List 接口&#xff0c;因此具备 Lis…...

基于python+django的图书借阅网站-图书借阅管理系统源码+运行步骤

该系统是基于pythondjango开发的在线图书借阅管理系统。系统适合场景&#xff1a;大学生、课程作业、系统设计、毕业设计。 演示地址 前台地址&#xff1a; http://book.gitapp.cn 后台地址&#xff1a;http://book.gitapp.cn/#/admin 后台管理帐号&#xff1a; 用户名&…...

Flutter运行错误:UG! exception in phase ‘semantic analysis‘

最近在Mac Mini M4上通过Android Studio导入Flutter项目并运行&#xff0c;结果一直跑不起来&#xff0c;错误日志如下&#xff1a; 执行命令查看版本信息&#xff1a; flutter doctor --verbose通过输出信息Java version OpenJDK Runtime Environment (build 21.0.41242208…...

Python-docx库详解:轻松实现Word文档自动化生成与图片尺寸控制

Python-docx库详解&#xff1a;轻松实现Word文档自动化生成与图片尺寸控制 在现代办公自动化的浪潮中&#xff0c;文档处理是一项不可或缺的任务。Python作为一种强大的编程语言&#xff0c;提供了丰富的库来简化这些任务。其中&#xff0c;python-docx库是处理Word文档的有力…...

【NLP 42、实践 ⑪ 用Bert模型结构实现自回归语言模型的训练】

目录 数据文件 一、模型定义 1.模型初始化 代码运行流程 2.前向传播&#xff0c;计算损失 ⭐ 代码运行流程 二、加载语料 代码运行流程 三、 随机生成样本 代码运行流程 四、建立模型 五、采样策略选择 代码运行流程 六、模型效果测试 代码运行流程 七、模型训练 代码运行流程 …...

HTTPS

目录 一 HTTPS是什么 二 加密 三 加密方案 四 CA机构/证书 五 最终方案(对称密钥/非对称密钥/CA证书)和总体流程 一 HTTPS是什么 在应用层存在SSL&#xff0c;TLS(HTTP之下&#xff0c;传输层之上)加密/解密安全协议&#xff0c;如果HTTP经过这个协议&#xff0c;对端也走…...

electron框架(4.0)electron-builde和electron Forge的打包方式

----使用electron-builder打包&#xff08;需要魔法&#xff09; --安装electron-builder: npm install electron-builder -D--package.json中进行相关配置&#xff1a; {"name": "video-tools","version": "1.0.0","main&quo…...

SaaS系统的销售微服务与权限微服务边界设计

在设计SaaS系统的销售微服务与权限微服务的边界时&#xff0c;需要结合领域驱动设计&#xff08;DDD&#xff09;和微服务拆分原则&#xff0c;确保高内聚、低耦合。以下是结合微服务架构原则、多租户SaaS需求及权限管理场景的完整设计方案&#xff0c;整合了权限服务与销售服务…...

Unity-AI-Deepseek生成的生成模型代码

结果 能用&#xff0c;不是很理想&#xff0c;从左到右&#xff0c;分别是body,眼睛,演睫毛,手指套&#xff08;如果你知道这是什么&#xff09;结果不是很理想 (下面代码已包含&#xff0c;修复的切线只能传Vector3参数&#xff0c;Unity2022测试&#xff09; 你们帮我看看…...

Django REST Framework 请求封装源码解析与实现流程

版本说明&#xff1a; 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&#xff1a;Python CIRCT Design Entry 引言 在硬件设计和验证领域&#xff0c;随着设计复杂性的增加&#xff0c;传统的方法往往难以满足现代设计的需求。PyCDE&#xff08;Python CIRCT Design Entry&#xff09;作为CIRCT项目的一部分&#xff0c;旨在为硬件设计…...

Python实现deepseek接口的调用

简介&#xff1a;DeepSeek 是一个强大的大语言模型&#xff0c;提供 API 接口供开发者调用。在 Python 中&#xff0c;可以使用 requests 或 httpx 库向 DeepSeek API 发送请求&#xff0c;实现文本生成、代码补全&#xff0c;知识问答等功能。本文将介绍如何在 Python 中调用 …...

考研课程安排(自用)

文章目录 408数据结构&#xff08;王道&#xff09;计算机组成原理&#xff08;王道&#xff09;操作系统&#xff08;王道&#xff09;计算机网络&#xff08;湖科大版&#xff09; 数学一高等数学&#xff08;微积分&#xff09;线性代数和概率论 408 数据结构&#xff08;王…...

Mybatis操作数据库(注解+xml两个方式)

文章目录 1.个人回顾2.关于mybatis注解的说明3.字段和属性不匹配的解决方案3.1第一个方案3.2第二个方案3.3第三个方案 4.xml路径配置5.xml里面的字段映射 1.个人回顾 刚刚翻看了一下自己的这个之前写的博客&#xff0c;上一次和这个javaee相关的博客还是去年写的&#xff0c;也…...

文心快码 使用体验与介绍

一、文心快码的核心作用 文心快码是百度基于文心大模型开发的智能代码助手&#xff0c;核心价值包括&#xff1a; 代码生成与补全 通用开发&#xff1a;根据注释生成HTML/CSS/JS、Python、Java等代码C专项&#xff1a;生成类定义、STL容器操作、智能指针代码&#xff08;如st…...

区块链交易

文章目录 交易准备合约和代码逻辑合约compile.jsindex.js 运行 交易 项目来自https://github.com/Dapp-Learning-DAO/Dapp-Learning/blob/main/basic/02-web3js-transaction/README-cn.md 本项目包含对交易进行签名&#xff0c;发送&#xff0c;接收交易回执&#xff0c;验证…...

LeetCode 160 Intersection Of Two Linked Lists 相交链表 Java

题目&#xff1a;找到两个相交列表的起始点&#xff0c;如图c1开始为A和B两个链表的相交点 举例1&#xff1a;8为两个链表的相交点。 注意&#xff1a;相交不止是数值上的相同。 举例2&#xff1a;2为相交点 举例3&#xff1a;没有相交点 解题思路&#xff1a; 相交证明最后一…...

体育直播模板nba英超直播欧洲杯直播模板手机自适应

源码名称&#xff1a;体育直播模板nba英超直播欧洲杯直播模板手机自适应帝国cms 7.5模板 开发环境&#xff1a;帝国cms7.5 空间支持&#xff1a;phpmysql 带软件采集&#xff0c;可以挂着自动采集发布&#xff0c;无需人工操作&#xff01; 模板特点&#xff1a; 程序伪静态…...

Android Compose 图标按钮深度剖析:从源码到实践(五)

Android Compose 图标按钮深度剖析&#xff1a;从源码到实践 一、引言 在现代 Android 应用开发中&#xff0c;用户界面的交互性和美观性至关重要。图标按钮作为一种常见的 UI 元素&#xff0c;以其简洁直观的特点&#xff0c;在提升用户体验方面发挥着重要作用。Android Com…...

【Dive Into Stable Diffusion v3.5】2:Stable Diffusion v3.5原理介绍

【Dive Into Stable Diffusion v3.5】系列博文&#xff1a; 第1篇&#xff1a;开源项目正式发布——深入探索SDv3.5模型全参/LoRA/RLHF训练第2篇&#xff1a;Stable Diffusion v3.5原理介绍 目录 1 前言1.1 扩散模型的原理1.2 损失函数1.3 加噪流程1.4 推理流程1.5 negative pr…...

WPF 布局舍入(WPF 边框模糊 或 像素错位 的问题)

1. 什么是 WPF 布局舍入&#xff1f; 在 WPF 开发过程中&#xff0c;可能会遇到界面模糊、边框错位、文本渲染不清晰等问题。这些现象通常是由于 WPF 采用 设备无关像素&#xff08;DIP, Device Independent Pixels&#xff09;&#xff0c;在不同 DPI 设置下&#xff0c;UI 元…...

前端-选中pdf中的文字并使用,显示一个悬浮的翻译按钮(本地pdfjs+iframe)不适用textlayer

使用pdfjs移步– vue2使用pdfjs-dist实现pdf预览&#xff08;iframe形式&#xff0c;不修改pdfjs原来的ui和控件&#xff0c;dom层可以用display去掉一部分组件&#xff09; 方案1&#xff1a;获取选择文本内容的最前面的字符坐标的位置&#xff08;这种写法会导致如果选择超出…...

Mongodb分片模式部署

MongoDB 分片集群部署教程 1. 概述 MongoDB 分片是一种用于处理大规模数据集的集群技术。通过分片&#xff0c;MongoDB 可以将数据分布在多个服务器上&#xff0c;从而提高存储容量和读写性能。本教程将详细介绍如何从零开始部署 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 关联查询&#xff08;JOIN&#xff09;2.3 聚合查询2.4 子查询 3. 高级操作3.1 事务处理3.2 Typ…...

基于Spring Boot的企业内管信息化系统的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…...

【学习笔记】LLM推理与部署

文章目录 1 [LLMs inference] quantization 量化整体介绍&#xff08;bitsandbytes、GPTQ、GGUF、AWQ&#xff09;2 [LLMs inference] quantization 量化整体介绍&#xff08;bitsandbytes、GPTQ、GGUF、AWQ&#xff09;3 [LLMs serving] openrouter & vllm host LLM 推理服…...

leetcode-134.加油站

油箱容积无限&#xff0c;要求能环岛&#xff0c;说明总共加起来的油是不少于消耗量的&#xff0c;这是唯一一个决定能否环岛的变量&#xff0c;只要油量够&#xff0c;那么必定有一段路是攒油的路&#xff0c;它供给后续的消耗&#xff0c;使得油箱总是不空。 如果油量足够&am…...

companion object和object 从kotlin转java分析

说明 companion object 中 companion类中的方法是普通的方法 在外部类中生成静态变量&#xff0c;静态companion 对象 object MyClass2 中 类中方法是普通方法 在MyClass2中生成静态变量&#xff0c;静态MyClass2对象&#xff0c; 一 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} 不存在&#xff01;")loader PyPDFLoader(file_path)try:do…...

关于TVS管漏电流的问题?

问题描述&#xff1a; 在量产的带电池故事机生产中&#xff0c;工厂产线测试电流时&#xff0c;有1台机器电流比正常机器大10mA左右。 原因分析&#xff1a; 1、分析电路原理图&#xff0c;去除可能出现问题的电压或器件&#xff08;不影响系统&#xff09;&#xff0c;发现…...