`
songbin0201
  • 浏览: 323627 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jredis中实现Fail tolerance

阅读更多
redis支持master-slave模式,可以设置一个master,多个slave;采用读写分离的策略,master负责写数据,多个slave负责读数据,slave的数据是复制master上的,所以多个slave之间的数据是可以保持一致的,即便down了之后,也会通过加载dump数据的方式,重新加载会原来的缓存数据。

Fail-Tolerance
当前项目需要保证一个client连接到slave服务上读取数据,如果slave down 了之后,可以在不影响应用的情况下,自动切换到另外一个可用的slave

因为jredis不支持设置多个slave服务器,所以写了一个小工具类,目的是为了探测如果的当前正在使用的slave没有heartbeat之后,立马可以切换到一个可用的slave;这样可以保证one of slave down掉之后,不用missing-load也可及时切换到另外一个slave上读数据。

public class RedisFailToleranceUtil {

	private static JRedisService jredisService =  null;

	private static ConnectionSpec defaultConnectionSpec = null;
	
	private static int current = 1;
	
	private static HashMap<String,ConnectionSpec> serverPools = new HashMap<String,ConnectionSpec>();
	
	static{
		ConnectionSpec connectionSpec1 = DefaultConnectionSpec.newSpec("192.168.1.238", 6380, 0,null);
		ConnectionSpec connectionSpec2 = DefaultConnectionSpec.newSpec("192.168.1.238", 6381, 0,null);
		serverPools.put("1", connectionSpec1);
		serverPools.put("2", connectionSpec2);
	}
	
	private String next(){
		if(current>serverPools.size()){
			current=1;
		}
		int nextIndex = current;
		current++;
		return nextIndex+"";
	}
	
	private ConnectionSpec getConnectionSpec(){

		if(defaultConnectionSpec != null){
			return defaultConnectionSpec;
		}
		
		jredisService = null;
		/**
		 * we are working multiple servers
		 * try different servers,util we fetch the first available server pool
		 */
		HashMap<String,ConnectionSpec> tryServers = new HashMap<String,ConnectionSpec>(serverPools);
		if(serverPools.size() == 1){
			return (ConnectionSpec)serverPools.get("1");
		}
		
		while(!tryServers.isEmpty()){
			ConnectionSpec connectionSpec = tryServers.get(this.next());
			
			if(isConnect(connectionSpec)){
				return connectionSpec;
			}
			
			tryServers.remove(connectionSpec);
			if(tryServers.isEmpty()){
				break;
			}
		}
		
		return null;
	}
	
	/**
	 * try whether the server is available
	 * @param connectionSpec 
	 * @return true or false
	 */
	private boolean isConnect(ConnectionSpec connectionSpec){
		if(connectionSpec == null){
			return false;
		}
		
		JRedis jredis = new JRedisClient(connectionSpec.getAddress().getHostAddress(), connectionSpec.getPort());
		try{
			jredis.ping();
			jredis.quit();
		}catch(Exception e){
			return false;
		}
		return true;
	}
	
	public void initialize(){
		defaultConnectionSpec = this.getConnectionSpec();
		if(jredisService == null){
			synchronized (RedisFailToleranceUtil.class) {
				jredisService = new JRedisService(defaultConnectionSpec,100);
			}
		}
	}
	
	
	public String getS(String key){
		this.initialize();
		String value = null;
		try {
			value = DefaultCodec.toStr(jredisService.get(key));
		} catch (Exception e) {
			defaultConnectionSpec = null;
			this.initialize();
		}
		
		return value;
	}
	
	public static void main(String args[]){
		RedisFailToleranceUtil redis = new RedisFailToleranceUtil();
		redis.getS("name");
		
		try {
			Thread.sleep(10000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		redis.getS("name");
		
		try {
			Thread.sleep(30000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		redis.getS("name");
	}
}

分享到:
评论

相关推荐

    Mechanical tolerance stackup and analysis(公差叠加及分析)

    在机械工程领域,公差叠加及分析(Mechanical Tolerance Stackup and Analysis)是一项至关重要的技术,它涉及在设计和制造过程中对零件尺寸、形状、位置等公差进行精确控制和预测,以确保最终产品的装配精度和功能...

    Tolerance Analysis(公差分析)

    Tolerance Analysis(公差分析)

    MITCalc for Tolerance Analysis

    总结来说,MITCalc for Tolerance Analysis是一款强大的尺寸公差分析工具,它的出现极大地简化了工程设计中的公差计算过程,提高了设计精度,降低了生产成本。通过对公差的精确控制,工程师们能够创造出更优质、更...

    机械制造-Tolerance Manager公差分析及优化设计管理软件介绍.pdf

    Tolerance Manager软件的核心特点包括与Pro/E、Solidworks等主流三维设计软件的无缝集成,使设计者可以在熟悉的设计环境中直接进行尺寸管理。此外,Tolerance Manager在功能需求识别、功能建模、物理方程、几何尺寸...

    Tolerance机械公差查询工具 5.0.exe

    Tolerance机械公差查询工具

    Tolerance(公差查询) V5.7 官方版.zip

    Tolerance是一款机械计算机辅助设计软件。该软件的宗旨是最大程度减轻机械设计工程师的工作强度。软件的开发目标是提供机械设计中各种机械公差的查询和综合、快速地相关设计计算,帮助设计人员提高设计质量和效率。

    fault tolerance

    在计算机系统设计领域,**故障容错**(Fault Tolerance)是一项至关重要的技术,旨在确保系统即使在部分组件出现故障的情况下仍能正常运行。本文将深入探讨故障容错的基本概念、原理以及其实现过程中的一些实际案例...

    Mechanica_Tolerance_Stackup_And_Analysis

    根据提供的标题、描述和标签,我们可以深入探讨机械设计领域中的一个重要概念:Mechanica_Tolerance_Stackup_And_Analysis(公差叠加与分析)。这部分内容是机械设计与制造过程中非常关键的一部分,它直接关系到产品...

    tolerance.pdf

    tolerance.pdf

    Software Fault Tolerance Techniques and Implementation

    **容错**(Fault Tolerance)是指计算机系统在出现故障时仍能保持正确操作的能力。这一概念强调的是系统能够检测到错误并采取相应措施以避免这些错误导致系统崩溃或数据丢失。 **软件容错**是指在软件层面实现的...

    Tolerance机械公差查询软件

    Tolerance机械公差查询软件 用户手册 软硬件环境 1 软件环境 Windows 操作系统:Windows98/Me或Windows NT4.0/2000/XP/2003。 Solidworks:2001PLUS及以上版本。(仅在要求使用本软件的Solidworks辅助功能时)...

    Tolerance Analysis of Electronic Circuits Using MATLAB

    它被设计用来进行矩阵运算、绘制函数和数据、实现算法、创建用户界面以及与其它编程语言进行接口。MATLAB提供的功能包括数值分析、信号处理、统计运算以及图形可视化等。它在电子电路分析领域尤为重要,因为它能够...

    Tolerance机械公差查询工具 5.701.exe

    Tolerance机械公差查询工具 5.701

    GD&T Geometric Tolerance Desk Reference

    《GD&T Geometric Tolerance Desk Reference》是一本全面介绍GD&T基础知识及其在机械工程和汽车行业中应用的重要参考书。无论是对于初学者还是经验丰富的工程师来说,本书都是不可或缺的资源。通过学习本书,读者...

    Security and Fault Tolerance in Internet of Things

    Security and Fault Tolerance in Internet of Things By 作者: Rajat Subhra Chakraborty ISBN-10 书号: 3030028062 ISBN-13 书号: 9783030028060 Edition 版本: 1st ed. 2019 出版日期: 2019-01-04 pages 页数: ...

    agilent PMD tolerance testing

    Agilent Technologies的Harald Rosenfeldt在其文章中探讨了如何提高光学通信系统对偏振模色散(PMD)的容忍度,并提出了一种利用确定性偏振控制器结合现场测量PMD的方法来实现这一目标。通过这种方法可以有效地探索...

    NX二次开发UF-DRF-set-tolerance 函数介绍

    NX二次开发UF_DRF_set_tolerance 函数介绍,Ufun提供了一系列丰富的 API 函数,可以帮助用户实现自动化、定制化和扩展 NX 软件的功能。无论您是从事机械设计、制造、模具设计、逆向工程、CAE 分析等领域的专业人士,...

    Fault Tolerance(容错)功能与DRS(资源池)配合使用.pdf

    当 Fault Tolerance 与 DRS 结合使用时,两者可以实现更高级别的服务连续性和资源优化。 启用 Enhanced vMotion Compatibility (EVC) 功能,可以使得 Fault Tolerance 和 DRS 更加协调工作。EVC 是一种管理 CPU ...

    滑动窗口算法实现 C#

    ### 滑动窗口算法在C#中的实现 #### 算法原理及应用场景 滑动窗口算法是一种常用于数据处理、数据压缩等场景的有效算法。该算法的主要目的是通过不断移动一个固定大小或动态调整大小的窗口来检测、处理序列中的...

Global site tag (gtag.js) - Google Analytics