首页 > 数据库 >redis的简易哨兵模式

redis的简易哨兵模式

时间:2023-01-29 17:47:36浏览次数:36  
标签:activeServers 代码 redis 模式 哨兵 简易

某一天突然收到通知说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

相关文章

  • SpringBoot中配置Redis
    SpringBoot中整合Redis缓存背景:工作中需要用到缓存之前都是用ConcurrentHashMap公司不让用redis那我就小试牛刀一下前端的App、网页在登录时,或是用户在进行一些敏感......
  • 【Demo】Python + Echarts 简易实现一个数据分布图
    文章目录​​前言​​​​需求​​​​最终实现​​​​源码​​​​1.统计各省市总数量​​​​excle源文件示例​​​​统计​​​​2.Echarts的使用​​​​所需文件​​......
  • redis安装方式
    1、源码包编码安装操作系统版本centos7.6redis版本是7.0.81.1安装工具[root@localhost~]#yuminstallgccgcc-c++tcl-y1.2创建安装目录[root@localhos......
  • Redis实战9-全局唯一ID
    发布优惠券的时候,每个店铺都可以发布优惠券,当用户抢购的时候,优惠券表中的id如果使用数据库的自增长ID会存在以下问题:1:id的规律太明显,容易被刷2:当数据量很大的时候,会受到......
  • Redis缓存的主要异常及解决方案
    作者:京东物流陈昌浩1导读Redis是当前最流行的NoSQL数据库。Redis主要用来做缓存使用,在提高数据查询效率、保护数据库等方面起到了关键性的作用,很大程度上提高系统的......
  • 对标阿里P7面试Redis面试专题
    文章目录​​一、什么是Redis?简述它的优缺点。​​​​二、Redis与memcached相比有哪些优势?​​​​三、Redis支持哪几种数据类型?​​​​四、Redis主要消耗什么物理......
  • Redis实现分布式阻塞队列
    1.Redis分布式锁实现原理分布式锁本质上要实现的目标就是在Redis里面占一个“茅坑”,当别的进程也要来占时,发现已经有人蹲在那里了,就只好放弃或者稍后再试。占坑一般是......
  • Redis的同步机制
    Redis可以使用主从同步,从从同步。第一次同步时,主节点做一次bgsave,并同时将后续修改操作记录到内存buffer,待完成后将RDB文件全量同步到复制节点,复制节点接受完成后将RDB镜像......
  • Redis 缓存穿透,缓存击穿,缓存雪崩
    缓存击穿缓存击穿指的是缓存中没有数据但数据库中有数据(一般是热点数据缓存时间到期),同一时间大量的并发请求由于读缓存没读到数据,就去数据库去取数据,导致某个时间内数据库......
  • c#的Redis帮助类
    ///<summary>///Redis帮助类///</summary>publicclassRedisHelper:IDisposable{privatestaticreadonlyobjectLocker=newobj......