Jedis根据哨兵获得主节点和辅节点信息

本文介绍了如何使用JedisSentinelPool通过哨兵系统获取Redis的主节点和从节点信息。首先,需以单例模式创建JedisSentinelPool实例。获取主节点信息使用`getCurrentHostMaster()`,而获取从节点信息则通过`sentinelSlaves(String masterName)`方法,返回值为`List<Map<String, String>>`。在实际操作中,遇到的问题包括获取到的从节点地址错误(127.0.0.1)和主节点down机,问题根源在于sentinel.conf配置错误,修正配置并确保所有IP为公网IP后问题得到解决。" 134166315,9342206,理解Python机器学习中的分类评估指标:Accuracy、Balanced Accuracy、Top-k Accuracy和Zero-One Loss,"['机器学习', 'Python', '数据科学']
摘要由CSDN通过智能技术生成

Jedis根据哨兵获得主节点和辅节点信息

  1. 应单例模式创建JedisSentinelPool对象

  2. 主节点:

    jedisSentinelPool调用getCurrentHostMaster()得到当前主节点信息

  3. 父节点:

    注意到Jedis对象有一个方法sentinelSlaves(String masterName)

    分析可得,由Sentinel创建的Jedis对象可以通过此方法获得辅节点信息

    返回值是List<Map<String, String>>;

    相当于通过命令行

    redis-cli -p 26379
    >>> sentinel master mymaster
    >>> sentinel slaves mymaster
    

    获得到的信息

    格式详见

坑位

每次获取辅节点得到的是127.0.0.1的地址,并且程序执行后,主节点就down了。

经排查,是sentinel.conf的配置问题,官方配置全而细,一不小心就出错。直接创建最纯净的配置

port 26379
sentinel monitor mymaster <公网IP> 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000
sentinel parallel-syncs mymaster 1

然后把redis.conf中的所有ip都改为公网ip。问题解决

代码

package com.closer.redis;


import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import redis.clients.jedis.*;
import redis.clients.jedis.exceptions.JedisConnectionException;
import redis.clients.jedis.exceptions.JedisException;

import java.util.*;

/**
 * <p>JedisSentinelPoolUtil</p>
 * <p>description</p>
 *
 * @author ws
 * @version 1.0.0
 * @date 2020-06-06 15:09
 */
public class JedisSentinelPoolUtil {
   

    private static volatile JedisSentinelPool jedisSentinelPool = null;
    private static Set<String> sentinels = new HashSet<>(Arrays.asList(
            "<IP>:26379",
            "<IP>:26380",
            "<IP>:26381"
    ));
    private static Logger logger = LoggerFactory.getLogger(JedisSentinelPoolUtil.class);


    private JedisSentinelPoolUtil() {
   
    }

    /**
     * maxActive: 链接池中最大连接数,默认为8.
     * maxIdle: 链接池中最大空闲的连接数,
如果你需要配置 Redis节点哨兵服务,可以在 Spring Boot 项目的配置文件 application.properties 中添加以下配置: ``` # Redis 哨兵服务连接信息 spring.redis.sentinel.master=your-master-name spring.redis.sentinel.nodes=node1:port,node2:port,node3:port # Redis 连接池配置 spring.redis.pool.max-active=8 spring.redis.pool.max-wait=-1 spring.redis.pool.max-idle=8 spring.redis.pool.min-idle=0 ``` 其中,`your-master-name` 为 Redis 从架构中的节点名称,`node1:port,node2:port,node3:port` 为 Redis 哨兵节点的连接信息,多个节点之间用逗号分隔。 另外,上面的配置文件还包括了 Redis 连接池的配置信息,可以根据实际情况进行调整。这里的 `max-active` 表示同时最大连接数,`max-wait` 表示当连接池没有可用连接时,最大等待时间(负数表示无限等待),`max-idle` 表示连接池中最大空闲连接数,`min-idle` 表示连接池中最小空闲连接数。 需要注意的是,在使用 Redis 哨兵服务时,Spring Boot 应用需要引入 Redis Sentinel 的依赖,例如: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <exclusions> <exclusion> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.6.0</version> </dependency> ``` 其中,排除了 Spring Boot 自带的 Jedis,而使用了 Redis Sentinel 官方推荐的 Redisson 客户端库。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值