Java实现Redis哨兵

Java版Redis哨兵

前言:

  • 本文将采用文字+代码的方式,讲解redis版哨兵的实现,所有代码都将写在一个类中,每个属性和方法都会结合文字加以说明。

1. 哨兵(Sentinel)主要功能如下:

1、不时的监控redis节点是否良好运行,如果节点不可达就会对节点进行下线标识

2、如果被标识的是主节点,哨兵就会选举一个redis从(slave)节点成为新的主节点继续对外提供读写服务, 进而实现自动故障转移,保证系统的高可用。

3、在redis主节点 和 从节点 进行切换后,主节点配置文件master_redis.conf、从节点配置文件slave_redis.conf都要发生改变。

2. 准备工作:

  • Redis集群推荐一主两从,共三个节点。
  • jedis-2.9.0.jar 客户端框架

3. 代码实现

JavaSentinel.java
package com.middleware.redis.sentinels;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

import java.util.*;

/**
 * java版哨兵
 * 
 * @author 93733
 *
 */
public class JavaSentinel {
   

	// 主节点ip:端口    127.0.0.1:6379
	static String masterAddress = "127.0.0.1:6379";
	// 所有 slave
	static final Vector<String> slaveRedisServers = new Vector<String>();
	// 坏掉的实例
	static final Vector<String> badRedisServers = new Vector<String>();

	// 连接池对象
	static JedisPool jedisPool ;

	// 连接池配置信息对象
    private static JedisPoolConfig config = new JedisPoolConfig();

	/**
	 * 配置连接池信息
	 * @return
	 */
	static {
   

		// 最大连接数10
		config.setMaxTotal(10);
		//最大空闲连接数5
		config.setMaxIdle(5);

	}

	/**
	 * 获取jedis 实例
	 * @param
	 * @return
	 */
	public Jedis newJedisInstance() {
   
		return jedisPool.getResource() ;
	}

	volatile static JavaSentinel javaSentinel;

	/**
	 * 创建JavaSentinel对象
	 * @param isOpenSentinel 是否开启哨兵 true 开启, false 不开启
	 * @return
	 *
	 * 1) 如果开启哨兵, 我们创建一个定时任务, 延迟1秒,间隔3秒执行一次
	 * 2)每次执行时, 任务如下:
	 *              // 检测 master是否可以
	 * 				checkMaster();
	 * 				// 更新slave列表
	 * 				updateSlaves();
	 * 				// 检测坏掉的实例是否恢复正常
	 * 				checkBadServer();
	 *
	 * 3)初始化 jedisPool 对象 和 javaSentinel对象
	 *
	 */

	public static synchronized JavaSentinel getInstance(boolean isOpenSentinel){
   

		// 是否开启java哨兵
		if(isOpenSentinel){
   

			// 定时任务
			new Timer().schedule(new TimerTask() {
   
				@Override
				public void run(
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值