ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Redisson 节点运维 API 实战:统一管理 Single、Master-Slave、Sentinel 与 Cluster 集群节点

Redisson 节点运维 API 实战:统一管理 Single、Master-Slave、Sentinel 与 Cluster 集群节点 Redisson 节点运维 API 实战统一管理 Single、Master-Slave、Sentinel 与 Cluster 集群节点【免费下载链接】redissonRedisson: Valkey Redis Java Client and Real-Time Data Platform. Sync/Async/RxJava/Reactive API. Over 50 Valkey and Redis based Java objects and services: Set, Multimap, SortedSet, Map, List, Queue, Deque, Semaphore, Lock, AtomicLong, Map Reduce, Bloom filter, Spring, Tomcat, Scheduler, JCache API, Hibernate, RPC, local cache..项目地址: https://gitcode.com/GitHub_Trending/re/redisson导读本文聚焦 Redisson 提供的节点运维 APIorg.redisson.api.redisnode包讲解如何通过同一套编程模型对 Valkey/Redis 的Single单机、Master Slave主从、Sentinel哨兵与Cluster集群四种部署形态执行节点级操作包括批量 Ping 探活、获取节点句柄、查询内存与运行统计、读写运行时配置、触发持久化等。读完本文你将掌握RedissonClient.getRedisNodes(...)的统一入口用法、各部署形态下节点对象模型的差异以及每个节点对象的完整操作能力可直接用于日常巡检、故障排查与运维自动化。一、节点运维 API 的总体设计Redisson 将“对 Redis/Valkey 服务器实例本身的操作”与“对数据结构对象的操作”分离为两套 API。前者由redisnode包下的接口体系承载统一入口为RedissonClient中声明的泛型方法T extends BaseRedisNodes T getRedisNodes(RedisNodesT nodes);该方法在 RedissonClient.java 中定义返回值T由传入的RedisNodesT常量决定。RedisNodes是一个持有目标接口 Class 的类型标记类type token在 RedisNodes.java 中预定义了四个开箱即用的静态常量常量目标接口适用部署形态RedisNodes.CLUSTERRedisClusterRedis Cluster / Valkey ClusterRedisNodes.MASTER_SLAVERedisMasterSlave普通主从Master SlaveRedisNodes.SENTINEL_MASTER_SLAVERedisSentinelMasterSlaveSentinel 哨兵管理的主从RedisNodes.SINGLERedisSingle单机Single之所以用类型标记而非直接返回统一接口是为了让编译器在获取节点句柄时就推导出正确的静态类型例如getRedisNodes(RedisNodes.CLUSTER)的返回值可以直接赋值给RedisCluster变量无需强转。部署形态与 API 的强绑定校验getRedisNodes不是无条件的——Redisson 会根据当前连接配置严格校验部署形态是否匹配。以 Redisson.java 的实现为例请求RedisSingle时若当前配置是 Sentinel 或 Cluster抛出IllegalArgumentException(Cant be used in non Redis single configuration)请求RedisCluster时若当前不是 Cluster 配置抛出IllegalArgumentException(Cant be used in non Redis Cluster configuration)请求RedisSentinelMasterSlave时若当前不是 Sentinel 配置同样拒绝请求RedisMasterSlave时若当前是 Sentinel 或 Cluster 配置则拒绝。从源码结构可以推断这一设计有两个意图一是防止在错误的拓扑下调用节点 API 导致结果不可信二是通过config.isSentinelConfig()/config.isClusterConfig()等标志见 Redisson.java把“客户端视角的拓扑”与“底层连接管理”对齐。因此使用本 API 前必须确认你的Config与目标部署形态一致。二、四种部署形态的标准用法1. Cluster 集群形态RedisCluster cluster redisson.getRedisNodes(RedisNodes.CLUSTER); cluster.pingAll(); CollectionRedisClusterMaster masters cluster.getMasters(); CollectionRedisClusterSlave slaves cluster.getSlaves();RedisCluster接口见 RedisCluster.java在pingAll()之外还提供getMasters()返回集群内全部主节点句柄集合getMaster(String address)按地址获取主节点地址格式如redis://127.0.0.1:9233getSlaves()返回集群内全部从节点句柄集合getSlave(String address)按地址获取从节点。其实现类RedissonClusterNodesRedissonClusterNodes.java内部按NodeType.MASTER/NodeType.SLAVE从连接管理器中筛选节点这意味着getMasters()返回的主节点集合是动态反映当前集群拓扑的。2. Master Slave 主从形态RedisMasterSlave masterSlave redisson.getRedisNodes(RedisNodes.MASTER_SLAVE); masterSlave.pingAll(); RedisMaster master masterSlave.getMaster(); CollectionRedisSlave slaves masterSlave.getSlaves();RedisMasterSlave接口见 RedisMasterSlave.java提供主从形态下的节点获取getMaster()返回当前主节点getMaster(String address)按地址取主节点getSlaves()与getSlave(String address)对应从节点集合。3. Sentinel 哨兵形态RedisSentinelMasterSlave sentinelMasterSlave redisson.getRedisNodes(RedisNodes.SENTINEL_MASTER_SLAVE); sentinelMasterSlave.pingAll(); RedisMaster master sentinelMasterSlave.getMaster(); CollectionRedisSlave slaves sentinelMasterSlave.getSlaves(); CollectionRedisSentinel sentinels sentinelMasterSlave.getSentinels();RedisSentinelMasterSlave继承自RedisMasterSlave见 RedisSentinelMasterSlave.java因此在拥有主从全部能力之外额外提供哨兵节点的访问getSentinels()返回哨兵节点集合getSentinel(String address)按地址获取单个哨兵节点。这一设计体现了“哨兵形态 主从能力 哨兵管理面”的继承关系。4. Single 单机形态RedisSingle single redisson.getRedisNodes(RedisNodes.SINGLE); single.pingAll(); RedisMaster instance single.getInstance();RedisSingle接口见 RedisSingle.java最为精简除pingAll()外只有getInstance()返回代表当前唯一实例的RedisMaster句柄。三、节点级批量操作pingAll 与超时控制四种形态的入口接口都继承自BaseRedisNodes见 BaseRedisNodes.java其中定义了两个批量探活方法boolean pingAll(); boolean pingAll(long timeout, TimeUnit timeUnit);pingAll()对部署内所有节点执行 Ping每个节点的默认超时为 1000 毫秒pingAll(long timeout, TimeUnit timeUnit)为每个节点指定自定义超时返回值所有节点均回复PONG时返回true否则返回false。该语义是“全节点通过才算通过”适合作为健康检查脚本的判定条件任一节点超时或不可达都会导致整体结果为false从而暴露局部故障。四、单个节点的完整运维能力RedisNode 接口通过上述入口拿到的RedisMaster、RedisSlave、RedisClusterMaster、RedisClusterSlave、RedisSentinel等句柄统一继承自RedisNode接口见 RedisNode.java。它几乎覆盖了服务器运维的所有常规动作探活与基本信息方法说明boolean ping()Ping 当前节点默认超时 1000 毫秒收到PONG返回trueboolean ping(long timeout, TimeUnit timeUnit)带自定义超时的 PingInetSocketAddress getAddr()获取节点地址Time time()获取服务器当前时间秒long size()返回该节点上存储的 key 数量运行状态与统计方法说明MapString, String getMemoryStatistics()内存统计信息MapString, String info(InfoSection section)按分区查询节点信息InfoSection枚举支持ALL、SERVER、CLIENTS、MEMORY、PERSISTENCE、STATS、REPLICATION、CPU、COMMANDSTATS、CLUSTER、KEYSPACE、DEFAULTinfo(InfoSection.REPLICATION)可用于观察主从同步状态info(InfoSection.KEYSPACE)用于统计各库 key 数量是巡检脚本的常用组合。运行时配置读写MapString, String getConfig(String parameter); // 读取配置参数 void setConfig(String parameter, String value); // 动态修改配置参数这两方法对应 Redis 的CONFIG GET/CONFIG SET语义可在不重启服务的前提下调整参数例如动态调整maxmemory或appendonly。注意动态修改的配置通常不持久化如需固化应同时执行配置保存。持久化与备份操作方法说明void save()同步执行数据库保存阻塞式 RDB 快照void bgSave()后台执行数据库保存void scheduleBgSave()后台保存若 AOF 重写正在进行则调度到其完成后执行void bgRewriteAOF()执行 AOF 文件重写仅在没有后台持久化进程时启动失败不丢失数据Instant getLastSaveTime()最近一次成功保存数据库的时间结合getLastSaveTime()与scheduleBgSave()可以在低峰期编排一次“等待前序持久化任务完成”的安全备份流程bgRewriteAOF()则用于压缩膨胀的 AOF 文件。五、典型实战场景场景一集群健康巡检RedisCluster cluster redisson.getRedisNodes(RedisNodes.CLUSTER); // 1. 全集群探活 if (cluster.pingAll()) { System.out.println(all cluster nodes alive); } else { System.out.println(some nodes unreachable, check below:); } // 2. 定位失联节点 for (RedisClusterMaster master : cluster.getMasters()) { if (!master.ping(2, TimeUnit.SECONDS)) { System.err.println(master down: master.getAddr()); } } for (RedisClusterSlave slave : cluster.getSlaves()) { if (!slave.ping(2, TimeUnit.SECONDS)) { System.err.println(slave down: slave.getAddr()); } }场景二节点内存与数据量监控RedisMasterSlave ms redisson.getRedisNodes(RedisNodes.MASTER_SLAVE); RedisMaster master ms.getMaster(); MapString, String mem master.getMemoryStatistics(); // 内存统计 MapString, String keyspace master.info(RedisNode.InfoSection.KEYSPACE); // 各库 key 分布 long totalKeys master.size(); // 节点 key 总量场景三主从拓扑与哨兵状态核查RedisSentinelMasterSlave sms redisson.getRedisNodes(RedisNodes.SENTINEL_MASTER_SLAVE); RedisMaster master sms.getMaster(); // 当前被哨兵选出的主节点 CollectionRedisSlave slaves sms.getSlaves(); // 从节点集合 CollectionRedisSentinel sentinels sms.getSentinels(); // 哨兵节点集合 MapString, String repl master.info(RedisNode.InfoSection.REPLICATION); // 主从复制状态场景四单机节点备份触发RedisSingle single redisson.getRedisNodes(RedisNodes.SINGLE); RedisMaster instance single.getInstance(); instance.bgSave(); // 触发后台 RDB 保存 Instant last instance.getLastSaveTime(); // 轮询上次保存时间确认完成 instance.bgRewriteAOF(); // 触发 AOF 重写六、源码佐证与进一步探索统一入口与拓扑校验Redisson.java 中的getRedisNodes(...)完整实现了四种形态的分发与非法组合拦截类型标记常量RedisNodes.java 定义了CLUSTER/MASTER_SLAVE/SENTINEL_MASTER_SLAVE/SINGLE四个常量批量探活基类BaseRedisNodes.java 定义了pingAll()与带超时重载节点操作全集RedisNode.java 定义了探活、统计、配置读写、持久化、key 统计等全部节点级方法集群实现示例RedissonClusterNodes.java 展示了如何按NodeType.MASTER/NodeType.SLAVE从连接管理器动态获取节点集合相关测试RedissonRedisNodesTest.java 提供了节点 API 的实际调用样例可用于对照验证。结语Redisson 的节点运维 API 用一套简洁的泛型入口覆盖了四种主流部署形态从“全节点 Ping 探活”到“单个节点的内存统计、配置读写、持久化触发”均有类型安全的方法可调用。在实际使用中请记住两条关键约束一是getRedisNodes(...)的形态必须与Config中的部署配置一致否则会抛出IllegalArgumentException二是pingAll()采用“全通过才通过”的判定逻辑适合作为健康检查的原子条件。将本文的四个场景组合起来即可搭建出一套覆盖集群、主从、哨兵、单机的通用节点运维与巡检方案。【免费下载链接】redissonRedisson: Valkey Redis Java Client and Real-Time Data Platform. Sync/Async/RxJava/Reactive API. Over 50 Valkey and Redis based Java objects and services: Set, Multimap, SortedSet, Map, List, Queue, Deque, Semaphore, Lock, AtomicLong, Map Reduce, Bloom filter, Spring, Tomcat, Scheduler, JCache API, Hibernate, RPC, local cache..项目地址: https://gitcode.com/GitHub_Trending/re/redisson创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表