无单点redis 故障自动转移redis

阅读更多
github 传送门: https://github.com/chembohuang/no-single-point-of-failure-jedis

一、开发初衷:memcached 无单点方案过于陈旧,配置过于复杂。其中针对memcached的方案一是日本人开发的repcached,但这个项目差不多三年前就没有更新过了。支持的memcached版本也比较低。方案二是使用memcached的代理magent,这个就更离谱了,差不多4年没人理过了,而且安装配置麻烦,在出现故障重启时,旧数据还会丢失。
因此决定针对此缓存自写一个中间件,而新兴的redis在性能上又完爆memcached,没有不用的道理。最终的方案便于基于jedis(redis 的java 封装),使用apache的common-pools2和jdk的序列化反序列化通过程序的控制做到缓存的实时备份,故障自动切换,心跳监测功能。

二、使用方法(基于spring容器):
1.将代码打成jar包,引入所需工程,另外加依赖:
	
			redis.clients
			jedis
			2.4.1
		
		
		  org.ow2.asm
		  asm-util
		  4.0
		
		
			cglib
			cglib
			3.0
		
		

2.xml配置:


           
         
         
          
        
        
        
        
        
        
    

    
        
    

    
        
        
        
    

    
        
        
        
    

    

3.使用前注入该实例:
@Autowired
    private FailoverJedisPool jedisPool;


4.set对象进去redis:
jedisPool.getJedis().saveOrUpdate("myKey", someSerializeObject);

上面默认是半个小时失效,或者调用以下方法添加超时时间:
jedisPool.getJedis().saveOrUpdate("myKey", someSerializeObject,60*30);


5.从redis取对象:
SomeSerializeObject g = jedisPool.getJedis().getValue("myKey", SomeSerializeObject.class);


三、需要注意的是:
1.不要缓存jedisFacade这个实例,使用时先从jedisPool 取出来:
jedisPool.getJedis()
,因为这是池里的对象,用完后是要还回去的,实例通过cglib代理,用完后自动还了。

2.基于最新的jedis 2.4.1。

3.序列化与反序列化这块使用的是jdk默认的方式,如果想换成其它方式例如:fastjson\kryo\thrift等等,改jedisFacadeImpl.java里面两个方法即可。

4.程序控制redis的主从关系,所以你安装时全部以独立形式安装,也不要配主从。


你可能感兴趣的:(redis,jedis,failover,故障切换)