Redis实践(四)高可用的集群+哨兵部署 下的jedis开发
2016-11-17 10:22
801 查看
在实践(二)中,部署了高可用集群和哨兵,那么如何在这种情况下进行应用的开发呢,jedis提供了相应的api,可以实现。本次实践就是验证一下如何进行的。
2、本地eclipse环境里,建立java工程,进行应用连接和读写
1、客户端,获取redis连接池
2、客户端写入 key1,value1
3、客户端休眠30秒
4、客户端休眠开始后,在服务端,手工shutdwon 144的redis实例
5、客户端休眠30秒后,写入 key2,value2,并且读取key1,key2
(2) 代码如下:
下面是休眠30s开始后,服务端shutdown 144master, 哨兵发现后,进行主从切换
在144上,可以看到144原来的redis实例已经不在。
下面是客户端应用执行情况,redis的主从切换对于客户端应用是透明的。
从服务端可以看到应用设置的数据情况:
一、目标
通过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的主从切换对于客户端应用是透明的。
从服务端可以看到应用设置的数据情况:
相关文章推荐
- Redis实践(四)高可用的集群+哨兵部署 下的jedis开发
- Redis实践(二)高可用的集群+哨兵部署
- Redis实践(二)高可用的集群+哨兵部署
- Redis集群的高可用测试(含Jedis客户端的使用)
- keepalived+twemproxy部署redis高可用集群
- 第5周 Redis部署,高可用与分布式集群部署
- centos部署Redis和Java开发(Jedis)
- Redis集群的高可用测试(含Jedis客户端的使用)
- Redis3.2+Tomcat实现集群的Session管理 -- tomcat-redis-session-manager的编译和开发部署环境搭建
- 使用Docker Compose部署基于Sentinel的高可用Redis集群
- redis主从集群搭建及容灾部署(哨兵sentinel)
- Redis 集群高可用最佳实践
- CentOS 7.3 Sentinel实现Redis集群高可用部署
- keepalived+twemproxy部署redis集群高可用
- Spring集成Jedis(不依赖spring-data-redis)(单机/集群模式)(待实践)
- Redis主从集群搭建及容灾部署(哨兵sentinel)
- Redis3.2+Tomcat实现集群的Session管理 -- tomcat-redis-session-manager的编译和开发部署环境搭建
- Redis3.2+Tomcat实现集群的Session管理 -- tomcat-redis-session-manager的编译和开发部署环境搭建
- Redis实践(三)基于jedis开发java应用:redis的8种方式设置key,value
- Redis3.2+Tomcat实现集群的Session管理 -- tomcat-redis-session-manager的编译和开发部署环境搭建