redis 专题

本文深入探讨了Redis集群中的脑裂问题,解释了当master节点与集群断开连接时如何导致数据丢失,并提出了通过设置`min-slaves-to-write`和`min-slaves-max-lag`参数来防止这种情况。此外,还介绍了Redis的内存回收机制,包括过期策略和淘汰策略,确保高效使用内存。
摘要由CSDN通过智能技术生成

1、redis脑裂问题

redis脑裂其实是master脱离集群的一种情况,比如我们有如下集群:
在这里插入图片描述
下面说一种场景来模拟一下,我们有两个端的数据需要向redis 集群写入数据,比如这个数据经过哈希计算需要写入到 master1 中,但是此时瞬间 master1 与集群断开,造成数据写入到了 master1 中,但并没有同步到从服务,这时又有其他端写需要写数据到master1 ,因为此时的master1 与集群断开,造成进群内重新选举一个新的master1 ,此时选举完成,slave1 成了 master1 ,但是这时master1 重新上线,所以master1 成了 slave1 , 此时 新的 slave 1 会干一件事,就是清掉自己的数据去主动同步 master1 的数据,这时候大家就发现问题所在了,那个断开后写入的数据没有同步给其他从机啊,怎么能清掉 数据重新同步呢???其实这就是脑裂问题。

脑裂问题的解决:
(主要是需要两个参数配合来完成)
解决方案
redis的配置文件中,存在两个参数

#最少有三个slave节点
min-slaves-to-write 3
#数据复制和同步的延迟不能超过10秒
min-slaves-max-lag 10

第一个参数表示连接到master的最少slave数量
第二个参数表示slave连接到master的最大延迟时间
按照上面的配置,要求至少3个slave节点,且数据复制和同步的延迟不能超过10秒,否则的话master就会拒绝写请求,配置了这两个参数之后,如果发生集群脑裂,原先的master节点接收到客户端的写入请求会拒绝,就可以减少数据同步之后的数据丢失。

注意:
较新版本的redis.conf文件中的参数变成了

#最少有三个slave节点
min-replicas-to-write 3
#数据复制和同步的延迟不能超过10秒
min-replicas-max-lag 10

redis中的异步复制情况下的数据丢失问题也能使用这两个参数

2、Redis内存回收机制(Redis 过期策略、淘汰策略)

https://blog.csdn.net/a745233700/article/details/85413179

这是redis 4.0 以前的策略,4.0 以后又增加了两种内存回收策略 LFU 算法:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会飞的小蜗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值