【Redis】Redis哨兵模式 以及 缓存穿透、缓存击穿和缓存雪崩

为了保证数据的高可用性,我们常常不会只做一台Redis服务器,而Redis自己也提供了相关的命令来帮助你做到服务器的主从复制。

那就是 SLAVEOF ,使用了这条命令之后,SLAVEOF HOST PROT 添加的机器将成为另一台机器的slave服务器,此时使用INFO REPLICATION 的 语句就可以查看该条数据是 主节点还是从节点。

 

主节点和从节点的关系是主节点可以写入数据,而从节点从主节点中拷贝一份数据,此时你可以在两台slave服务器中查找到往主节点输入的这条数据。

 

那么当主节点挂掉的话怎么办呢,此时我们需要手动去配置主节点,而宕机重启的主节点在挂掉后,也不会重新加入成为主节点,而是独立出去,就好像之前没有对它进行过设置一样。

 

这种方式非常不智能,因此有了 哨兵模式。哨兵模式是 在主节点、从节点都存在的情况下,再启用一个进程,专门用来监控各个节点的状态,它和springcloud的注册中心有点像,使用的命令是 Redis-sentinel + sentinel.conf。而在sentinel.conf中,你需要指定 哪个host 、哪个port 等等,然后哨兵模式就能监测redis上各个节点情况。假如说现在有服务器挂了,例如说主节点挂了,它就会报failover指令并自动选择 一个从节点作为主节点,以此来保证数据的高可用性。在sentinel.conf中,你还可以设置多少时间下它认为主节点下线,可以设置通知的脚本,可以写shell脚本,做点短信通知什么的,还有故障转移时间等等。

 

当宕机后的主节点重新连接回来之后,只能作为从节点了,但是它还是加入到了高可用的这个环境当中了。

 

 

缓存穿透

缓存穿透就是当很多的数据没有在r缓存中存在,然后找不到他们就往持久化的数据库当中找,此时造成了大量的数据库访问压力,这就是缓存穿透。解决方案是做一个布隆过滤器,布隆过滤器是一种数据结构,将所有可能查询的参数用hash形式存储,在控制层进行校验,不符合的话就进行丢弃,从而避免了对底层数据库的查询压力。当存储层不命中,它就会反过来缓存,即便是空对象也缓存,同时设置一个过期时间,之后再访问就是从缓存当中查。

 

缓存击穿

缓存击穿就是 像子弹同时打墙面的一个点,当一个key值十分热点,例如像微博的热搜,此时这个key值不过期还好,当它一旦过期,这个大量的访问会瞬间涌向持久化的数据库,此时就会给数据库造成很大的访问压力,就像墙面被击穿了一样。解决的方法就是设置这个key永不过期,或者说加互斥锁,当通过缓存去查持久化的数据库的时候 ,只能有一个线程对它进行查询,另一个线程要想查它就得等。

 

缓存雪崩

缓存雪崩就是指的在某一个瞬间,缓存集中失效,例如说设置了双十一设置了一个小时的热点key在一点集体失效,或者说宕机的情况。对于数据库来说,它会造成周期性的压力波峰。其实缓存过期并不可怕,因为它是能预见,比较害怕的是某个缓存服务的节点突然宕机,这时候底层数据库很有可能突然遭受瞬间的压力骤增,因此不可预知。解决方法是,第一个就是增加数据的高可用性,一台不行就再加一台,第二个是叫限流降级,在缓存失效之后,通过加锁或者队列来控制,比如对于某个key只允许一个线程来访问。最后一个方法就是数据预热,在正式数据访问当来之前,先把数据访问一遍加载到缓存当中,然后设置不同的过期时间,这样就能保证访问的时候和过期的时候能尽量均匀一些。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
缓存穿透缓存击穿缓存雪崩是常见的缓存问题,下面是关于Redis缓存穿透缓存击穿缓存雪崩的介绍: 1. 缓存穿透缓存穿透是指当一个请求查询一个不存在于缓存中的数据时,由于缓存无法命中,请求会直接访问数据库。这种情况下,如果有大量的请求查询不存在的数据,会导致数据库压力过大,影响系统性能。 2. 缓存击穿缓存击穿是指当一个热点数据的缓存过期或失效时,大量的请求同时访问该数据,导致缓存无法命中,请求会直接访问数据库。这种情况下,数据库会承受巨大的压力,可能导致数据库崩溃。 3. 缓存雪崩缓存雪崩是指当缓存中的大量数据同时过期或失效时,大量的请求会直接访问数据库,导致数据库压力剧增,性能下降甚至系统崩溃。缓存雪崩通常是由于缓存服务器故障、缓存设置不合理或者缓存数据过期时间设置不当等原因引起的。 为了避免缓存穿透缓存击穿缓存雪崩问题,可以采取以下措施: - 缓存穿透:可以在应用层对查询的数据进行校验,如果数据不存在,则不进行缓存操作,避免大量无效的请求访问数据库。 - 缓存击穿:可以互斥锁或分布式锁来保护热点数据的问,当缓存失效时,只允许一个请求访问数据库并更新缓存,其他请求等待缓存更新完成后再从缓存中获取数据。 - 缓存雪崩:可以采用多级缓存缓存预热、设置合理的缓存过期时间等策略来避免大量缓存同时失效,保证系统的稳定性和性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值