【redis源码】删除大key导致redis主从切换

本文介绍了在Redis中删除大key导致主从切换的问题,提出了解决方案,包括使用SCAN命令分批删除和Redis 4.0引入的惰性删除(lazyfree)机制。详细分析了unlink命令的惰性删除过程以及过期删除的策略,建议在处理大key时使用unlink以避免阻塞主进程。
摘要由CSDN通过智能技术生成

1. 问题简述

前几天接收到报警,同时Redis团队监控到redis集群发生了主从切换;

最终分析原因是,删除大key,导致redis主服务器阻塞,sentinel哨兵认为主服务器宕机,进行了故障转移;如下图所示:

在Redis集群中,应用程序尽量避免使用大键;直接影响容易导致集群的容量和请求出现”倾斜问题“,同时在删除大键或者打键过期时,容易出现故障切换和应用程序雪崩的故障;

查询线上有一个集合键,集合oea_set_star_ol_2017元素个数达到4300万;当删除这个键,或者键过期时,会阻塞redis主进程,从而发生了主从切换;(集合中的每个元素对象都要释放内存空间,时间复杂度比较高)

2. 解决方案

众所周知,Redis是单进程执行命令请求的;集合已经有4000多万元素了,想要删除这个集合,肯定不能直接删除,否则必会阻塞主进程;

我们可以一点一点删除集合中的元素;

Redis 2.8以上版本提供了这么一个命令:SCAN 命令,其相关的 SSCAN 命令、 HSCAN 命令和 ZSCAN 命令;

它们每次执行都只会返回少量元素;(而不会出现像 KEYS命令、 SMEMBERS 命令带来问题 —— 当 KEYS 命令被用于处理一个大的数据库时, 又或者 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值