如何解决呢?
大概的解决流程,如下:
- 进入工单找到失败的实例,使用失败实例的 slave 节点,在 Daas 平台的“工具集-操作项管理”进行 Bigkey 分析 。

文章插图
- 经过分析找出了 hash 类型的 Bigkey 有 8421874 个 fields,正是这个 Bigkey 导致迁移时间太长,超过了迁移时间限制,导致工单失败了 。

文章插图
3.和业务沟通,这些 key 是记录用户访问系统的某个功能模块的 ip 地址的,访问该功能模块的所有 ip 都会记录到给 key 里面,随着时间的积累,这个 key 变的越来越大 。同样是采用拆分的方式进行优化,可以考虑按照时间日期维度来拆分,就是一段时间段的访问 ip 记录到一个 key 中 。
4.Bigkey 优化后,扩容的工单可以重试,完成集群扩容操作 。
生产上如何进行Bigkey 的发现
- 首先需要重源头治理,防止 Bigkey 的产生;
- 其次是需要能够及时的发现,发现后及时处理 。
1.Bigkeys 命令分析Redis4.0 及以上版本提供了--Bigkeys 命令,可以分析出实例中每种数据结构的 top 1 的 Bigkey,同时给出了每种数据类型的键值个数以及平均大小 。
执行--Bigkeys 命令时候需要注意以下几点:
- 建议在 slave 节点执行,因为--Bigkeys 也是通过 scan 完成的,可能会对节点造成阻塞 。
- 建议在节点本机执行,这样可以减少网络开销 。
- 如果没有从节点,可以使用--i 参数,例如(--i 0.1 代表 100 毫秒执行一次) 。
- --Bigkeys 只能计算每种数据结构的 top1,如果有些数据结构有比较多的 Bigkey,是查找不出来的 。
2. RDB 文件分析借助开源的工具,比如 rdb-tools,分析 Redis 实例的 RDB 文件,找出其中的 Bigkey,这种方式需要生成 RDB 文件,需要注意以下几点:
- 建议在 slave 节点执行,因为生成 RDB 文件会影响节点性能 。
- 需要生成 RDB 文件,会影响节点性能,虽然在 slave 节点执行,但是也是有可能造成主从中断,进而影响到 master 节点 。
3.Bigkey 巡检通过巡检,可以暴露出隐患,提前解决,避免故障的发生,进行全网 Bigkey 的巡检,是避免 Bigkey 故障的比较好的方法 。
由于全网 Redis 实例数量非常大,分析的速度比较慢,使用当前的分析方法很难完成 。
为了解决这个问题,存储研发组分布式数据库同学计划开发一个高效的 RDB 解析工具,然后通过大规模解析 RDB 文件来分析 Bigkey,可以提高分析速度,实现 Bigkey 的巡检 。
生产上 Bigkey 处理优化1. Bigkey 拆分优化 Bigkey 的原则就是 string 减少字符串长度,list、hash、set、zset 等减少元素数量 。当我们知道哪些 key 是 Bigkey 时,可以把单个 key 拆分成多个 key,比如以下拆分方式可以参考 。
- big list:list1、list2、...listN
- big hash:可以做二次的 hash,例如 hash%100
- 按照日期拆分多个:key20220310、key20220311、key202203212
推荐阅读
- 鞠婧祎|假身高、假头发、假屁股,“弄虚作假”的娱乐圈还有什么是真的
- 李冰冰|断盐断油!李冰冰的“翻车”,打脸了多少明星的“伪自律”!
- 陈瑶|《情满九道弯》出圈理由:萨日娜的演技,陈瑶的脸,热依扎的衣品
- 职工医保个账“缩水”的经济账,事关3.5亿打工人!
- 参保人去世,养老保险就白缴了吗?6个最关心的问题权威解答来了
- 韭菜花炒蛋的做法
- 叉烧炒蛋的做法
- 卤鸡蛋
- 南瓜蛋羹的做法
- 豆豉辣椒炒蛋
