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

来源:互联网 发布:手机淘宝投诉卖家流程 编辑:程序博客网 时间:2024/06/06 00:52

在实践(二)中,部署了高可用集群和哨兵,那么如何在这种情况下进行应用的开发呢,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) 代码如下:

      

[java] view plain copy
  1. <span style="font-family:Microsoft YaHei;font-size:14px;">package com.cwqsolo.redis.test;  
  2.   
  3. import java.util.HashSet;  
  4. import java.util.Set;  
  5.   
  6. import redis.clients.jedis.HostAndPort;  
  7. import redis.clients.jedis.Jedis;  
  8. import redis.clients.jedis.JedisSentinelPool;  
  9.   
  10. public class RedisSentinelDemo {  
  11.   
  12.     // redis 采用1主1从方式, 主:192.168.136.144 从:192.168.136.155  
  13.     // sentinel 采用3哨兵, 144上部署2个,155上部署1个  
  14.     public static void main(String[] args) {  
  15.   
  16.     // 创建哨兵池  
  17.     Set sentinels = new HashSet();  
  18.     sentinels.add(new HostAndPort("192.168.136.144"16379).toString());  
  19.     sentinels.add(new HostAndPort("192.168.136.144"26379).toString());  
  20.     sentinels.add(new HostAndPort("192.168.136.155"16379).toString());  
  21.     JedisSentinelPool sentinelPool = new JedisSentinelPool("mymaster",  
  22.         sentinels);  
  23.     System.out.println("Current master: "  
  24.         + sentinelPool.getCurrentHostMaster().toString());  
  25.   
  26.     Jedis master = sentinelPool.getResource();  
  27.     master.set("username1""cwqsolo");  
  28.     System.out.println("set->username1:cwqsolo ");  
  29.     sentinelPool.returnResource(master);  
  30.   
  31.     // 这里休眠30秒 ,将144 主redis杀掉,按哨兵机制,将发现主redis状态down  
  32.     // 重新选举新的slave为主master  
  33.     try {  
  34.         System.out.println("sleep 30s  begin");  
  35.         Thread.sleep(30000);  
  36.         System.out.println("sleep 30s  end!!!");  
  37.     } catch (Exception Exc) {  
  38.   
  39.         Exc.printStackTrace();  
  40.         System.exit(0);  
  41.     }  
  42.   
  43.     // 重新获得jedis  
  44.     Jedis master2 = sentinelPool.getResource();  
  45.     String value = master2.get("username1");  
  46.     System.out.println("get->username1: " + value);  
  47.   
  48.     master2.set("username2""newland");  
  49.     System.out.println("set->username2:newland ");  
  50.   
  51.     String value2 = master2.get("username2");  
  52.     System.out.println("get->username2: " + value);  
  53.   
  54.     master2.close();  
  55.     sentinelPool.destroy();  
  56.     }  
  57. }</span>  
      (3) 过程记录

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

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

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


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

阅读全文
0 0