Redis 的 keys 命令你知道有多慢吗?

简介: Redis 的 keys 命令你知道有多慢吗?

keys命令的用法:


keys pattern

查找符合正则匹配的key的列表。扫描对象是Redis服务中所有的key,想想都很慢对不对?


同时执行keys命令的同时,Redis进程将被阻塞,无法执行其他命令,假如超过了哨兵的down-after-milliseconds配置,还会进行主从切换,切换过程中,如果主节点恢复正常,还可能出现脑裂等一系列问题。


所以,生产环境中,建议直接禁用keys命令。


Keys命令的替代方案

  • scan扫描,避免阻塞
  • 将需要统计的数据放入一个set中 (但是这样可能出现Big Key问题,一般数据量大就不推荐)

Keys命令在Redis Cluster中是怎样执行的?

一般来说,keys命令对于集群节点来说,是不知道路由到哪个节点的,不像 get命令。在Java的Jedis客户端的JedisClusterKeyCommands类中,我们看到:


public Set<byte[]> keys(byte[] pattern) {
 // 在每个节点执行keys命令
 Collection<Set<byte[]>> keysPerNode = connection.getClusterCommandExecutor()
   .executeCommandOnAllNodes((JedisClusterCommandCallback<Set<byte[]>>) client -> client.keys(pattern))
   .resultsAsList();
 // 合并成一个整体后返回
 Set<byte[]> keys = new HashSet<>();
 for (Set<byte[]> keySet : keysPerNode) {
  keys.addAll(keySet);
 }
 return keys;
}


我们看到,Jedis是通过在每个节点上执行keys命令,并将结果合并返回的。


本文既然将keys命令的慢,那么他到底有多慢呢?


Keys命令到底有多慢?

这里主要是给大家一个基本的概念,并不是深入剖析。


image.png


这是腾讯云上Redis集群服务中,慢查询的日志。我们看到,Keys命令大概执行了250ms ~ 300ms。

image.png



根据节点信息,我们看到,每个节点存储了大约153w的key,占用内存300M+,平均每个键值对占用内存0.208KB,合213个字节。


根据我的理解,既然keys命令返回的是key值,而集群中其实有一个结构slots_to_keys 记录着所有key 的, 这只与key的数量有关,与Big key的关系不大。


按照这种猜想,假如此时Redis节点占用内存为3G,且Key数量成比例,那么Keys命令执行时间因为3s左右,这段时间Redis节点是阻塞的。


原文链接:https://blog.csdn.net/weixin_37968613/article/details/119065777




相关文章
|
机器学习/深度学习 人工智能 自然语言处理
人工智能领域中训练、评估和推理概念的了解
人工智能领域中训练、评估和推理概念的了解
1384 0
|
数据库 数据库管理 索引
索引在提高查询性能方面的优势体现在哪些方面?
索引在提高查询性能方面具有多方面的显著优势
492 65
|
编解码 安全 数据挖掘
《移动应用上线前的关键大考:用户验收测试深度解析》
用户验收测试是移动应用开发中的关键环节,贯穿从需求分析到最终优化的全过程。它不仅是对功能的检验,更是从用户真实需求和体验出发,全面审视应用价值的核心步骤。通过明确测试目标、多方协作、梳理业务流程、设计测试用例及模拟真实场景,确保应用在复杂环境中稳定可靠。严谨执行测试、深入数据分析与清晰报告编写,为应用优化提供依据。最终,通过有效沟通推动持续改进,使应用在竞争中脱颖而出,赢得用户信赖。这是连接开发者与用户的桥梁,助力打造卓越产品。
353 12
|
开发者 容器
HarmonyOS Next快速入门:Button组件
本教程摘自《HarmonyOS Next快速入门》,聚焦HarmonyOS应用开发中的Button组件。Button支持胶囊、圆形和普通三种类型,可通过子组件实现复杂功能,如嵌入图片或文字。支持自定义样式(边框弧度、文本样式、背景色等)及点击事件处理。示例代码展示了不同类型按钮的创建与交互逻辑,助开发者快速上手。适合HarmonyOS初学者及对UI组件感兴趣的开发者学习。
1126 0
|
人工智能 运维 Cloud Native
Argo Workflows at KubeCon Europe 2025: 多元场景的云原生任务编排
Argo Workflow在KubeCon Europe 2025展示了其在AI/ML/HPC任务、事件驱动、平台工程、批量数据处理、混沌测试等多元场景的云原生任务编排能力。
|
机器学习/深度学习 存储 人工智能
【AI系统】昇思MindSpore并行
本文介绍昇思MindSpore的并行训练技术,包括张量重排布、自动微分等,旨在简化并行策略搜索,提高大规模模型训练效率。文章探讨了大模型带来的挑战及现有框架的局限性,详细说明了MindSpore如何通过技术创新解决这些问题,实现高效的大模型训练。
457 20
【AI系统】昇思MindSpore并行
|
人工智能 测试技术 API
FlagEvalMM:智源开源的多模态模型评测框架
FlagEvalMM 是由北京智源人工智能研究院开源的多模态模型评测框架,旨在全面评估处理文本、图像、视频等多种模态的模型。该框架支持多种任务和指标,采用评测与模型推理解耦的设计,提升评测效率,便于快速适配新任务和模型。
951 11
FlagEvalMM:智源开源的多模态模型评测框架
|
机器学习/深度学习 人工智能 调度
【AI系统】CANN 算子类型
本文介绍了算子的基本概念及其在编程和数学中的作用,重点探讨了CANN算子在AI编程和神经网络中的应用,特别是华为CANN算子在AI CPU上的架构和开发要求。CANN是华为推出的异构计算架构,旨在优化AI处理器的计算效率,支持多种AI框架,涵盖AI Core和AI CPU算子,以适应不同类型的计算需求。文中还详细说明了AI CPU算子的开发流程和适用场景,为开发者提供了宝贵的指导。
911 2
|
传感器 监控 自动驾驶
|
监控 安全 数据安全/隐私保护
系统监控软件有哪些
【10月更文挑战第17天】
836 10