Redis实践(四)高可用的集群+哨兵部署 下的jedis开发

在实践(二)中,部署了高可用集群和哨兵,那么如何在这种情况下进行应用的开发呢,jedis提供了相应的api,可以实现。本次实践就是验证一下如何进行的。

一、目标

通过java小程序,来验证当redis发生主从切换后,对应用是透明的,数据的存储和读写可以正常工作

二、环境

1、还是使用144,155 上部署的redis集群,1主1从,3个哨兵

        2、本地eclipse环境里,建立java工程,进行应用连接和读写

三、步骤

(1)验证步骤描述

        1、客户端,获取redis连接池

        2、客户端写入 key1,value1

        3、客户端休眠30秒

        4、客户端休眠开始后,在服务端,手工shutdwon 144的redis实例

        5、客户端休眠30秒后,写入 key2,value2,并且读取key1,key2

       (2) 代码如下:

      

package com.cwqsolo.redis.test;

import java.util.HashSet;
import java.util.Set;

import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisSentinelPool;

public class RedisSentinelDemo {

    // redis 采用1主1从方式, 主:192.168.136.144 从:192.168.136.155
    // sentinel 采用3哨兵, 144上部署2个,155上部署1个
    public static void main(String[] args) {

	// 创建哨兵池
	Set sentinels = new HashSet();
	sentinels.add(new HostAndPort("192.168.136.144", 16379).toString());
	sentinels.add(new HostAndPort("192.168.136.144", 26379).toString());
	sentinels.add(new HostAndPort("192.168.136.155", 16379).toString());
	JedisSentinelPool sentinelPool = new JedisSentinelPool("mymaster",
		sentinels);
	System.out.println("Current master: "
		+ sentinelPool.getCurrentHostMaster().toString());

	Jedis master = sentinelPool.getResource();
	master.set("username1", "cwqsolo");
	System.out.println("set->username1:cwqsolo ");
	sentinelPool.returnResource(master);

	// 这里休眠30秒 ,将144 主redis杀掉,按哨兵机制,将发现主redis状态down
	// 重新选举新的slave为主master
	try {
	    System.out.println("sleep 30s  begin");
	    Thread.sleep(30000);
	    System.out.println("sleep 30s  end!!!");
	} catch (Exception Exc) {

	    Exc.printStackTrace();
	    System.exit(0);
	}

	// 重新获得jedis
	Jedis master2 = sentinelPool.getResource();
	String value = master2.get("username1");
	System.out.println("get->username1: " + value);

	master2.set("username2", "newland");
	System.out.println("set->username2:newland ");

	String value2 = master2.get("username2");
	System.out.println("get->username2: " + value);

	master2.close();
	sentinelPool.destroy();
    }
}
      (3) 过程记录

        下面是休眠30s开始后,服务端shutdown 144master, 哨兵发现后,进行主从切换

       在144上,可以看到144原来的redis实例已经不在。

   下面是客户端应用执行情况,redis的主从切换对于客户端应用是透明的。


    从服务端可以看到应用设置的数据情况:


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值