某一天突然收到通知说redis的服务器挂了,因为是支付服务用到的redis,所以赶紧去查一下对服务流程有没有影响,结果是一切正常,松了一口气。
后面看了一下代码发现里面自己封装的redis框架实现了一个简易哨兵模式。大概的逻辑是:
1.初始化读取配置文件,加载redis配置,里面有一个activeServers和downServers分别代表可用和失效的缓存服务器
checkActive的实现
2.在获取jedis实例的时候会扫描activeServers
3.有一个心跳定时任务会定期检测activeServers是否可用,代码设置了10秒检测一次。
这样实现有一个好处,就是redis挂了之后,心跳检测到连接失败会把redis直接剔除,如果都连接不上就直接返回空。
如果是这种写法的话,每次都会报连接超时错误,redis默认连接时间是2秒,相当于redis挂掉的时间接口都会卡两秒才返回。
所以写代码要考虑的东西很多,根据具体的业务场景去设计,由于系统用的redis是查重用的,如果失败也会去查数据库,redis挂了不应该影响业务流程。
这样写相当于自己实现了一个简易的哨兵模式,这是17年的代码,我觉得实现的思想是可以学习一下的。
但是这样也有一个弊端,就是代码看得挺复杂,出了问题不好维护,如果直接用redis集群模式就简单很多,不用自己实现一堆逻辑。所以后面还是不推荐用这种方式...
标签:activeServers,代码,redis,模式,哨兵,简易 From: https://www.cnblogs.com/bbibbi/p/17073354.html