写点什么

redis 工作原理 (下)

用户头像
Sakura
关注
发布于: 2021 年 03 月 09 日

6 redis 主挂了怎么操作

  redis 提供了哨兵模式,当主挂了,可以选举其他的进行代替,哨兵模式的实现原理,就是三个定时任务监控,

  6.1 每隔 10s,每个 S 节点(哨兵节点)会向主节点和从节点发送 info 命令获取最新的拓扑结构


  6.2 每隔 2s,每个 S 节点会向某频道上发送该 S 节点对于主节点的判断以及当前 Sl 节点的信息,


    同时每个 Sentinel 节点也会订阅该频道,来了解其他 S 节点以及它们对主节点的判断(做客观下线依据)


  6.3 每隔 1s,每个 S 节点会向主节点、从节点、其余 S 节点发送一条 ping 命令做一次心跳检测(心跳检测机制),来确认这些节点当前是否可达


  当三次心跳检测之后,就会进行投票,当超过半数以上的时候就会将该节点当做主

7 redis 集群

  redis 集群在 3.0 以后提供了 ruby 脚本进行搭建,引入了糙的概念,

  Redis 集群内节点通过 ping/pong 消息实现节点通信,消息不但可以传播节点槽信息,还可以传播其他状态如:主从状态、节点故障等。因此故障发现也是通过消息传播机制实现的,主要环节包括:主观下线(pfail)和客观下线(fail)


  主客观下线:


  主观下线:集群中每个节点都会定期向其他节点发送 ping 消息,接收节点回复 pong 消息作为响应。如果通信一直失败,则发送节点会把接收节点标记为主观下线(pfail)状态。

  

  客观下线:超过半数,对该主节点做客观下线


  主节点选举出某一主节点作为领导者,来进行故障转移。


  故障转移(选举从节点作为新主节点)


8 内存淘汰策略

Redis 的内存淘汰策略是指在 Redis 的用于缓存的内存不足时,怎么处理需要新写入且需要申请额外空间的数据。


noeviction:当内存不足以容纳新写入数据时,新写入操作会报错。


allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的 key。


allkeys-random:当内存不足以容纳新写入数据时,在键空间中,随机移除某个 key。


volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的 key。


volatile-random:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个 key。


volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的 key 优先移除。



9 缓存击穿的解决方案:

  原因:就是别人请求数据的时候,很多数据在缓存中无法查询到,直接进入数据查询,

  解决方法,对相关数据进行查询的数据只查询缓存,如果是一些特殊的可以进行数据库查询,

  也可以采用布隆过滤器进行查询

 

10 缓存雪崩的解决方案:

  缓存雪崩的原因:一次性加入缓存的数据过多,导致内存过高,从而影响内存的使用导致服务宕机

  解决方法:

  1 redis 集群,通过集群方式将数据放置

  2 后端服务降级和限流:当一个接口请求次数过多,那么就会添加过多数据,可以对服务进行限流,限制访问的数量,这样就可以减少问题的出现


用户头像

Sakura

关注

还未添加个人签名 2020.09.22 加入

还未添加个人简介

评论

发布
暂无评论
redis工作原理(下)