设为首页 收藏本站
查看: 1044|回复: 0

[经验分享] 无单点redis 故障自动转移redis

[复制链接]

尚未签到

发表于 2016-12-19 07:56:57 | 显示全部楼层 |阅读模式
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包,引入所需工程,另外加依赖:
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.4.1</version>
</dependency>
<dependency>
<groupId>org.ow2.asm</groupId>
<artifactId>asm-util</artifactId>
<version>4.0</version>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>3.0</version>
</dependency>

2.xml配置:

<!-- jedis configuration starts-->
<bean id="config" class="org.apache.commons.pool2.impl.GenericObjectPoolConfig">
<property name="maxTotal" value="200"></property>  
<property name="maxIdle" value="50"></property>
<property name="minIdle" value="10"></property>
<property name="maxWaitMillis" value="15000"></property>  
<property name="lifo" value="true"></property>
<property name="blockWhenExhausted" value="true"></property>
<property name="testOnBorrow" value="false"></property>
<property name="testOnReturn" value="false"></property>
<property name="testWhileIdle" value="false"></property>
<property name="timeBetweenEvictionRunsMillis" value="30000"></property>
</bean>
<bean id="jedisCluster" class="com.csair.wx.cache.redis.FailoverJedisCluster" init-method="init">
<property name="redisServers"  value="10.92.2.61:6379,10.92.2.60:6379" />
</bean>
<bean id="jedisPool" class="com.csair.wx.cache.redis.FailoverJedisPool">
<constructor-arg type="org.apache.commons.pool2.impl.GenericObjectPoolConfig" ref="config" />
<constructor-arg type="com.csair.wx.cache.redis.FailoverJedisCluster" ref="jedisCluster" />
<constructor-arg type="org.apache.commons.pool2.impl.AbandonedConfig" ref="abandonConfig" />
</bean>
<bean id="abandonConfig" class="org.apache.commons.pool2.impl.AbandonedConfig">
<property name="removeAbandonedTimeout" value="10"></property>
<property name="removeAbandonedOnBorrow" value="true"></property>
<property name="removeAbandonedOnMaintenance" value="true"></property>
</bean>
<bean class="com.csair.wx.cache.redis.util.SpringContextutil" />
<!-- jedis configuration ends-->
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的主从关系,所以你安装时全部以独立形式安装,也不要配主从。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-316115-1-1.html 上篇帖子: 10.redis支持5种数据类型 下篇帖子: redis命令大全
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表