Redis 基础详细介绍(Redis简单介绍,命令行客户端,Redis 命令,Java客户端)

1. Redis 简介

Redis(Remote Dictionary Server)是一个开源的内存数据库,遵守 BSD 协议,它提供了一个高性能的键值(key-value)存储系统,常用于缓存、消息队列、会话存储等应用场景。

1.1 特征

  • 丰富的数据类型:Redis 不仅仅支持简单的 key-value 类型的数据,还提供了 list、set、zset(有序集合)、hash 等数据结构的存储。这些数据类型可以更好地满足特定的业务需求,使得 Redis 可以用于更广泛的应用场景。

  • 高性能的读写能力:Redis 能读的速度是 110000次/s,写的速度是 81000次/s。这种高性能主要得益于 Redis 将数据存储在内存中,从而显著提高了数据的访问速度。

  • 原子性操作:Redis 的所有操作都是原子性的,这意味着操作要么完全执行,要么完全不执行。这种特性对于确保数据的一致性和完整性非常重要。

  • 持久化机制:Redis 支持数据的持久化,可以将内存中的数据保存在磁盘中,以便在系统重启后能够再次加载使用。这为 Redis 提供了数据安全性,确保数据不会因为系统故障而丢失。

  • 丰富的特性集:Redis 还支持 publish/subscribe(发布/订阅)模式、通知、key 过期等高级特性。这些特性使得 Redis 可以用于消息队列、实时数据分析等复杂的应用场景

  • 主从复制和高可用性:Redis 支持 master-slave 模式的数据备份,提供了数据的备份和主从复制功能,增强了数据的可用性和容错性。

  • 支持 Lua 脚本:Redis 支持使用 Lua 脚本来编写复杂的操作,这些脚本可以在服务器端执行,提供了更多的灵活性和强大的功能。

  • 单线程模型:尽管 Redis 是单线程的,但它通过高效的事件驱动模型来处理并发请求,确保了高性能和低延迟。

1.2 SQL 和 NOSQL 区别

Redis 属于 NOSQL 类型

  • 结构化:数据库表的字段的类型即长度都是限定好的。
  • SQL查询:SQL 查询语句格式是固定的无论 MySql 还是 Oracle
  • ACID:原子性,一致性,隔离性,持久性
  • BASE:不全部满足 ACID
  • 关联:数据表中的数据可以通过外键关联在一起

2. Redis 命令行客户端

Redis 安装完成后就自带了命令行客户端:redis-cli,使用方式如下:

// 先输入
redis-cli -h 127.0.0.1 -p 6379
// 回车后输入
auth 123456

其中常见的 options 有:

  • -h 127.0.0.1:指定要连接的 redis 节点的 IP 地址,默认是 127.0.0.1 (本机),也可以填写本机的 IP 地址
  • -p 6379:指定要连接的 redis 节点的端口,默认是 6379
  • -a 123456:指定 redis 的访问密码 (一般不这个,使用 auth 命令来输入密码)

3. Redis 数据结构介绍

4. Redis 命令

对于这些命令 Redis 都提供了帮助文档只要在你要使用的命令前面加入 help 即可

4.1 通用命令

  • KEYS

    查看符合模板的所有 key,不建议在生成环境设备上使用

    KEYS pattern
    
  • DEL

    删除一个指定的 Key

    DEL key [key ...]
    
  • EXISTS

    判断 Key 是否存在

    EXISTS key [key ...]
    
  • EXPIRE

    给一个 Key 设置有效期,有效期到了该 Key 自动删除

    EXPIRE key seconds
    
  • TTL

    查看一个 Key 剩余的有效期

    TTL key
    
  • hlep

    查看某个命令的使用方法

    help del
    

4.2 String类型命令

4.2.1 String类型分类

  • 字符串
  • 整形(Int)
  • 浮点型(Float)
4.2.2 常用命令
  • SET

    添加或者修改,指定键不存在则新增,否则修改

     set name jack
    
  • GET

    根据 key 获取 String 类型的 Value

    get name
    
  • MSET

    批量添加 String 类型的键值对

    mset key1 value1 key2 value2
    
  • MGET

    根据多个 Key 获取多个 Value

    mget key1 key2
    
  • INCR

    让一个整形的 key 的值自增 1

    incr age
    
  • INCRBY

    让一个整形 key 自增并指定步长

    incrby num 2
    
  • INCRBYFLOAT

    让一个浮点类型的值自增并指定步长

    incrbyfloat num 0.2
    
  • SETNX

    添加一个 String 类型的键值对前提是这个 Key 不存在,否则不执行

    setnx name jack
    
  • SETEX

    添加一个键值对,并指定有效日期。

    setex name 10 jack
    

4.3 Key的层级格式

在 Redis 没有类似于 MySQL 中 Table 的概念,我们如何区分不同类型 Key 呢?

比如我们需要存储商品信息和用户信息到 Redis 当中,此时他们的 Id 恰好都为 1。这样当我们要取数据时发现无法区分。此时我们可以给 Key 加上一个前缀加以区分。当然这前缀按规范要具有一定层次结构

4.4 Hash类型命令

该结构类似于 Java 的 HashMap

4.4.1 哈希类型结构

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4.4.2 常见命令

  • HSET key field value

    添加或者修改 Hash 类型,键为 key ,值的键为 field 的值为 Value

    hset user name zhansan 
    
  • HGET key field

    根据 key 获取 Hash 类型,键为 key ,值的键为 field 的值

    hget user name
    
  • HMSET

    批量添加 Hash 类型 Key 的 field 的值

    hset user name zhansan age 18
    
  • HMGET

    批量获取 Hash 类型,键为 key 的多个 field 的值

    hmget user name age
    
  • HGETALL

    获取一个 Hash 类型,键为 key 所有的键值对

    hgetall user
    
  • HKEYS

    获取一个 Hash 类型,键为 key 所有的键

    hkeys user
    
  • HVALS

    获取一个 Hash 类型,键为 key 所有的值

    hvals user
    
  • HINCRBY

    让一个 Hash 类型的 key 的 field 的值自增长指定步长

    hincrby user age 2
    
  • HSETNX

    添加一个 Hash 类型的 key 的 field 的值,前提是这个 field 不存在,否则不执行

    hsetnx user age 100
    

4.5 List类型

类似双端队列,查询慢,删除快,该数据类型可以根据方法,模拟栈,队列,阻塞队列的数据结构

4.5.1 常见命令

  • LPUSH key element

    向列表左侧插入一个或者多个元素

    lpush goods car food
    
  • RPUSH key element

    向列表右侧插入一个或者多个元素

    rpush goods car food
    
  • RPOP KEY [COUNT]

    将列表左侧元素弹出一个或者多个,没有则返回 nil

    lpop goods 2
    
  • RPOP KEY

    将列表右侧元素弹出一个或者多个,没有则返回 nil

    rpop goods 2
    
  • BLPOP 和 BRPOP [TimeOut]

    和 LPOP 和 RPOP 类似,只不过在当列表中没有元素的时候会等待指定时间,而不是返回nil,后面该功能会被充当缓冲队列

     Brpop user 10
    
  • LRANGE KEY STAR END

    返回一段角标内的所有元素

4.6 Set类型

无序,不重复,查询快,类似于 C++ 的 Unordered_Set

4.6.1 常见命令

  • SADD key member

    向指定 Key 的集合中插入一个或者多个元素

  • SREM key member

    将指定 Key 的集合中指定元素删除

  • SCARD key

    统计集合中的元素

  • SISMEMBER key member

    查询某个元素是否在集合当中

  • SMEMBERS key

    获取指定Key的集合中的所有元素

  • SINTER key1 key2

    获取键为 key1 和 key2 两个集合的交集

  • SDIFF key1 key2

    获取键为 key1 和 key2 两个集合的差集

  • SUNION key1 key2

    获取键为 key1 和 key2 两个集合的并集

4.7 SortedSet类型

可排序集合和 Java 中的 TreeSet 类似,但底层差距很大。SortedSet中的每个元素都带有一个score属性,可以基于 score 的值对集合进行排序,底层实现是 跳表 + hash表 。常被用于实现排行榜的业务。

4.7.1 常用命令

  • ZADD key score member

    添加一个或者多个元素,score 是加入元素的分数(排序依据),member 表示要加入的元素

  • ZREM key member

    删除指定元素

  • ZSCORE key member

    获取指定元素的分数

  • ZRANK key member

    获取指定元素的排名(默认升序排名,可以用 ZREVRANK 获取降序排名)

  • ZCARD key

    获取集合中的元素数量

  • ZCOUNT key min max

    统计 Score 值在 min 和 max 之间的元素个数

  • ZINCRBY key increment member

    让集合指定元素 member 自增,步长为指定的 increment 的值

  • ZRANGE key min max

    按照 Score 排序后,获取指定排名范围内的元素

  • ZRANGEBYSCORE key min max

    按照 Score 排序后,获取指定分数范围内的元素

  • ZDIFF,ZINTER,ZUNION

    求差集,求交集,求并集。

5. Java客户端

5.1 简介

Java的Redis客户端(如Jedis、Lettuce)通过封装Redis协议,允许Java应用与Redis服务器交互。它们提供直观的API执行数据操作,支持连接池、集群、哨兵等部署模式。其中Jedis轻量高效但线程不安全,需配合连接池使用;Lettuce基于Netty实现异步与线程安全Redisson专注分布式服务。开发者可根据性能、线程模型和功能需求灵活选用。

5.2 Jedis

5.2.1 简介

Jedis 是一款轻量级、同步阻塞的 Java Redis 客户端,通过直连模式与 Redis 服务器通信。其 API 直接映射 Redis 原生命令(如 set() 对应 SET 指令),学习成本低且稳定性强;但原生线程不安全(多线程需依赖连接池),适用于并发要求不高的传统项目或小型应用,是 Java 生态中最经典的 Redis 集成方案之一。

5.2.2 特点

  • 优点:
    Jedis 设计小巧,实现简洁,稳定性高。其最大优势在于 API 与 Redis 原生命令高度一致:方法名和参数直接对应官方文档指令。这使得开发者遇到不熟悉的操作时,无需额外学习客户端封装,直接查阅 Redis 命令文档即可快速上手,显著降低了学习成本。相比之下,某些客户端重命名 API 的做法虽意图简化,实则增加了额外的记忆负担。

  • 缺点:
    Jedis 采用直连模式且非线程安全。其核心问题在于:单个 Jedis 实例内的 RedisOutputStream (写流) 和 RedisInputStream (读流) 是共享的全局资源。当多个线程并发操作同一实例时,会争抢这些流资源,导致读写数据混乱(如数据错位、混合),而非 Redis 服务本身的数据安全问题。

5.2.3 Jedis 的使用

  • 引用依赖
<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.7.0</version>
</dependency>
  • 建立连接
private Jedis jedis;
@Before // 该注解,表示在所有你创键的测试方法前先执行,这里用于建立连接
public void setUp() throws Exception {jedis = new Jedis("192.168.195.132", 6379); //建立连接jedis.auth("123456"); //密码jedis.select(0); //选择库
}
  • 使用 Jedis
@Test
public void testString() {//命令名和 Redis 的一致 String s = jedis.set("name", "tom");String name = jedis.get("name");
}
  • 释放资源
@After // 该注解,表示在所有你创键的测试方法后执行,这里用于关闭连接
public void tearDown() throws Exception {// 如果在建立连接的时候抛出了异常,那么运行到这的时就会有空指针异常的风险if(jedis != null) {jedis.close();}
}

5.2.4 Jedis连接池

Jedis本身是线程不安全的,并且频繁的创建和销毁连接会有性能损耗。所以建议使用 Jedis 的连接池来代替 Jedis的直连方式。

public class JedisConnectionFactory {private static JedisPool jedisPool;static {//配置连接池JedisPoolConfig poolConfig = new JedisPoolConfig();//最大连接量,表示最多建立8个连接poolConfig.setMaxTotal(8); //最大空闲连接,表示即便没有线程访问我这个池子,也会最多预备8个连接poolConfig.setMaxIdle(8); //最小空闲连接,表示空闲连接存放一段时间后,会被自动释放,直到预备连接小于等于2个poolConfig.setMinIdle(2); //最长等待时间,表示当连接池内没有空闲连接时,线程对多等多久后放弃等待poolConfig.setMaxWaitMillis(1000); //建立连接jedisPool = new JedisPool(poolConfig,"192.168.195.132", 6379, 1000, "123456");}// 获取连接public static Jedis getJedis() {return jedisPool.getResource();}
}

5.3 SpringDataRedis

5.3.1 简介

  • Spring Data Redis 是 Spring 生态的 Redis 集成框架,内部整合来 Jedis 和 Lettuce。
  • 提供了RedisTemplate统一 API 来操作 Redis。
  • 简化数据操作(自动处理序列化/连接管理)
  • 支持事务、发布订阅、集群与哨兵模式,并天然适配 Spring 事务管理,显著降低 Java 应用访问 Redis 的复杂度,适用于需与 Spring 深度整合的中大型项目。

5.3.2 SpringDataRedis的使用

**SpringBoot 已经整合 SpringDataRedis,并且实现了自动装配,使用起来非常方便,**所以下面我们基于SpringBoot 来使用 SpringDataRedis

  • 引入依赖
<!--redis起步依赖-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency><!--连接池依赖-->
<!--无论是 Jedis 还是 Luttce,都是基于 commons-pool 来实现连接池的效果 -->
<dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId>
</dependency>
  • 连接和连接池配置
spring:data:redis:host: 192.168.195.132 #连接的虚拟机的 IP 地址port: 6379 #端口号database: 0 #连接的数据库password: 123456 #密码lettuce:pool: #连接池的配置max-active: 8 #最大连接数max-idle: 8 #最大空闲连接数min-idle: 0 #最小空闲连接数max-wait: 100ms #最大等待时间#具体解释可以看 Jedis 配置连接池那一节
  • 测试代码
@SpringBootTest
class RedisDemoApplicationTests {@Autowiredprivate RedisTemplate redisTemplate;@Testvoid stringTest() {redisTemplate.opsForValue().set("name", "虎哥");Object name = redisTemplate.opsForValue().get("name");System.out.println(name);}
}

5.3.3 RedisTemplated的缺点

RedisTemplate 可以存储任意类型的数据,原因是在存储之前会先把存储的数据序列化字节形式,默认采用的 JDK 序列化。但是得到的结果,可读性差,并且占用了更多的内存

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

5.3.3 解决方式

RedisTemplate 的缺点产生原因在于他默认的序列化方式不太合适,所以我们可以更改他的序列化方式即可解决这个问题。

存在的小问题以及解决办法

  • 但是这种方式还是存在一点点问题就是,他 Value 使用的是 Json 序列化器,当存入和获取的数据类型是对象是会自动序列化和反序列化,但是要实现自动反序列化,存入 Redis 的数据数据需要加一段额外的信息来记录该 Json 数据属于哪个对象,这样就造成了,内存的额外开销。
  • 解决方式也很简单,就是再一次跟换 Value 的序列化方式,采用和 Key 一样的 String 序列化器,但是后果就是,存入数据类型只能是 String 类型。但是没关系,只要当我们要存入对象时,就先将他转为 Json 字符串格式
  • 但是幸运的是我们不要自己再去修改,RedisTemplate 的 Value 的序列化方式了。这个别人已经写好了。Spring 提供了一个 StringRedisTemplate 类,他的 Key 和 Value 默认的序列化方式就是 String 序列化,省去了我们自己定义 RedisTemplate。

5.3.4 StringRedisTemplate

5.3.4.1 简介

为了节省空间我们并不会使用 Json 的序列化器来处理 value,而是统一的使用 String 的序列化器,要求只能存储String 类型的 key 和 value。当需要存储 Java 对象的时候,需手动完成对象序列化和反序列化

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

5.3.4.2 使用步骤

至于序列化工具,使用自己喜欢的就好,我这里使用的 FastJson

  • 导入依赖
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.7</version>
</dependency>
  • 代码演示
@Autowired
private StringRedisTemplate stringRedisTemplate;@Test
void objectTest() {User user = new User("name", "虎哥");//手动序列化(object -> Json)String s = JSON.toJSONString(user);stringRedisTemplate.opsForValue().set("user:100", s);String s1 = stringRedisTemplate.opsForValue().get("user:100");//手动反序列化(Json -> object)User user1 = JSON.parseObject(s1, User.class);System.out.println(user1);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/914272.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/914272.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C/C++数据结构之多维数组

概述多维数组&#xff0c;实际上就是“数组的数组”。最常见的是二维数组&#xff0c;就像一个表格&#xff0c;拥有行和列。而三维数组则可以想象为多个这样的表格堆叠起来形成的一个立方体。依此类推&#xff0c;我们可以构建四维、五维甚至更高维度的数组。多维数组主要用于…

[Rust 基础课程]选一个合适的 Rust 编辑器

市面上现在有很多编辑器都可以开发 Rust&#xff0c;很多都是以安装 Rust 插件的形式来对 Rust 做支持&#xff0c;本课程使用 RustRover&#xff0c;如果你喜欢其他的编辑器&#xff0c;可以自己捣鼓下。 RustRover https://www.jetbrains.com/rust/ jetbrains 专门对于 Ru…

【零基础学AI】第37讲:提示词工程(Prompt Engineering)

本节课你将学到 理解提示词工程的核心原理 掌握5种实用的Prompt设计模式 学会优化提示词的评估方法 实现一个智能问答系统优化案例 开始之前 环境要求 Python 3.8安装包&#xff1a;pip install openai tiktokenOpenAI API密钥&#xff08;免费注册&#xff1a;https://plat…

莫兰迪色系工作总结汇报PPT模版分享

莫兰迪色工作总结PPT模版&#xff0c;莫兰迪调色板PPT模版&#xff0c;莫兰迪色系高级简约PPT模版&#xff0c;莫兰迪色系工作汇报&#xff0c;莫兰迪总结汇报模版 莫兰迪色系工作总结汇报PPT模版分享&#xff1a;https://pan.quark.cn/s/35bcaa03c837

uniapp的app项目,某个页面长时间无操作,返回首页

最开始想做成一个公共的&#xff0c;完全提取出来的一个组件&#xff0c;组件设置背景透明&#xff0c;到时候哪个页面需要&#xff0c;直接引入组件就可以了&#xff0c;所以最开始做的是一个vue的组件&#xff0c;在组件中&#xff0c;监听页面的touchstart&#xff0c;但是这…

【实证分析】上市公司绿色战略数据集(2000-2023年)

数据简介&#xff1a;绿色战略是指企业根据其所处的外部环境&#xff08;包括“绿色浪潮”等环保趋势&#xff09;和企业自身的经营条件&#xff0c;为实现企业生存与发展质量的持续提升&#xff0c;而对企业生产经营活动进行绿色化改造的总体规划。这包括制定企业绿色可持续发…

【SpringAI】7. 基于 milvus 的向量检索

SpringAI 基于 milvus 的向量检索 向量数据库可以使用 milvus&#xff0c;redis,Elasticsearch 等&#xff0c;本文以 milvus 为例&#xff1a; 1. 启动milvus 为了尽可能快速上手springai的vectordb功能&#xff0c;我们推荐使用云上的milvus&#xff0c;注册就能创建免费的…

如何使用数字化动态水印对教育视频进行加密?

文章目录前言一、什么是数字化动态水印二、使用数字化动态水印对教育视频加密的好处&#xff1f;三、数字化动态水印的实现原理四、如何实现数字化动态水印对教育视频加密总结前言 教育资源数字化蓬勃发展的今天&#xff0c;优质视频课程已成为机构的核心知识资产。然而&#…

解决bash终端的路径名称乱码问题

解决bash终端的路径名称乱码 默认打开了zsh&#xff0c;当我输入bash后&#xff0c;就出现了乱码 (context_rag) [23fanyaohead1]~/mycode-thesis% bash (context_rag) [%n%m]%~%#乱码原因排查 我遇到了终端乱码问题&#xff0c;需要检查当前的终端环境和编码设置&#xff0c;下…

【深度学习】【入门】Sequential的使用和简单神经网络搭建

1.Sequential的概念它是一种按顺序封装神经网络层的容器&#xff0c;能让层按照添加顺序依次执行计算&#xff0c;简化网络搭建流程2.Sequential的作用1.代码简洁化对比不用 Sequential 时手动搭建层的繁琐代码&#xff08;如每层需手动定义并连接&#xff09;&#xff0c;展示…

前端开发中的资源缓存详解

资源缓存用于缓存静态资源,良好的缓存策略可以减少资源重复加载进而提高网页的整体加载速度。 通常浏览器缓存策略分为两种:强缓存和协商缓存,当然还包括 service worker。 浏览器在资源加载时,根据请求头中的 expires 和 cache-control 值来判断是否命中强缓存,命中则直…

零基础入门指南:华为数通认证体系详解

一、华为数通认证的定位与行业价值华为数通认证&#xff08;Datacom&#xff09;是ICT领域核心方向&#xff0c;覆盖路由器、交换机等网络基础设备技术&#xff0c;被誉为“网络行业的骨骼”。2020年升级为Datacom认证体系&#xff0c;新增SDN、VXLAN、网络自动化等前沿技术&am…

超低功耗CC2340R SimpleLink™ 系列 2.4GHz 无线 MCU支持BLE5.3/Zigbee/Thread/专有协议

CC2340R SimpleLink™ 系列 2.4GHz 无线 MCU支持BLE5.3/Zigbee/Thread/专有协议优势简介性能介绍应用场景优势简介 CC2340R SimpleLink™ 系列器件为 2.4GHz 无线微控制器 (MCU)&#xff0c;面向低功耗 Bluetooth5.3、Zigbee、Thread 和专有 2.4GHz 应用。这些器件针对低功耗无…

若依前后端分离Vue3版本接入阿里云OSS

一、引入依赖首先在commom 模块的pom 下面引入 阿里云OSS 的 依赖<!-- 阿里云oss --><dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.17.4</version></depende…

2025年微软mos备考攻略-穷鬼版

说实话&#xff0c;微软MOS认证是微软官芳推出的办公软件方面的认证&#xff0c;考试难度真的不大&#xff0c;完全没必要报班&#xff0c;自学完全OK&#xff01;一、25 年报考MOS认证详情报名时间&#xff1a;随时可以在官网或ji构报名&#xff08;ji构报名会送备考资料&…

数据库版本自动管理

FlywayDB 是一款 开源数据库版本管理工具&#xff0c;开发中将表结构的变更或数据初始化脚本维护好&#xff0c;更新到测试环境或线上发版启动服务的时候&#xff0c;会检测版本号自动执行数据库变更&#xff0c;可以减少每次发版到其他环境的人工执行操作。 工作流程初始化阶段…

解决Linux绑定失败地址已使用(端口被占用)的问题

文章目录解决 bind failed: Address already in use 问题一、问题原因1. **端口已经被其他程序占用**2. **端口处于 TIME_WAIT 状态**3. **未正确关闭套接字**二、如何排查和解决问题1. **确认端口是否被占用**2. **查找并杀掉占用端口的进程**3. **等待端口释放&#xff08;TI…

Ragas的Prompt Object

Prompt在Ragas中被用在各种指标、合成数据生成任务中。同时也为提供了替换各种自动以提示词的方式。Ragas提供了如下几种Prompt Objects。 instruction:prompt的基础组成,通过自然语言清晰的描述LLM需要完成的任务。在prompt object中用instruction变量定义。few-shot exampl…

PHP语法高级篇(一):日期时间处理和包含文件

从本篇文章开始&#xff0c;将学习PHP的高级特性内容。本篇文章将记录在PHP中如何进行日期时间处理和包含文件的学习过程。 一、日期和时间 在PHP中&#xff0c;date() 函数用于格式化日期或时间。 说明 date(string $format, ?int $timestamp null): string 使用指定整数…

请求服务端获取broker的机房归属信息异常

该错误表明服务在尝试获取 broker 的 ​机房归属信息​ 时遇到异常。以下是详细分析和解决方案建议&#xff1a;​问题定位与常见原因​​网络问题​客户端无法连接存储机房信息的元数据服务​&#xff08;如配置中心、注册中心&#xff09;。防火墙或安全组阻断了相关端口&…