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




相关文章
|
机器学习/深度学习 算法 数据可视化
【机器学习】十大算法之一 “PCA”
PCA(Principal Component Analysis,主成分分析)是一种广泛使用的线性降维算法,在机器学习领域被广泛应用。通俗地说,它是一种通过将高维数据映射到低维数据,保留数据主要特征的方法。在PCA中,数据被投影到一个新的低维抽象空间中,使新的特征集能最大化地解释数据集的方差,我们可以选择保留最大方差的前k个特征值。通常,PCA被用于降维,但它也被用作一种特征提取算法。在本文中,我们介绍了PCA算法的基本原理,讨论了它的应用,以及在Python中如何实现。
2189 0
【机器学习】十大算法之一 “PCA”
|
数据库 数据库管理 索引
索引在提高查询性能方面的优势体现在哪些方面?
索引在提高查询性能方面具有多方面的显著优势
535 65
|
编解码 安全 数据挖掘
《移动应用上线前的关键大考:用户验收测试深度解析》
用户验收测试是移动应用开发中的关键环节,贯穿从需求分析到最终优化的全过程。它不仅是对功能的检验,更是从用户真实需求和体验出发,全面审视应用价值的核心步骤。通过明确测试目标、多方协作、梳理业务流程、设计测试用例及模拟真实场景,确保应用在复杂环境中稳定可靠。严谨执行测试、深入数据分析与清晰报告编写,为应用优化提供依据。最终,通过有效沟通推动持续改进,使应用在竞争中脱颖而出,赢得用户信赖。这是连接开发者与用户的桥梁,助力打造卓越产品。
424 12
|
人工智能 运维 Cloud Native
Argo Workflows at KubeCon Europe 2025: 多元场景的云原生任务编排
Argo Workflow在KubeCon Europe 2025展示了其在AI/ML/HPC任务、事件驱动、平台工程、批量数据处理、混沌测试等多元场景的云原生任务编排能力。
|
开发者 容器
HarmonyOS Next快速入门:Button组件
本教程摘自《HarmonyOS Next快速入门》,聚焦HarmonyOS应用开发中的Button组件。Button支持胶囊、圆形和普通三种类型,可通过子组件实现复杂功能,如嵌入图片或文字。支持自定义样式(边框弧度、文本样式、背景色等)及点击事件处理。示例代码展示了不同类型按钮的创建与交互逻辑,助开发者快速上手。适合HarmonyOS初学者及对UI组件感兴趣的开发者学习。
1206 0
|
机器学习/深度学习 存储 人工智能
【AI系统】昇思MindSpore并行
本文介绍昇思MindSpore的并行训练技术,包括张量重排布、自动微分等,旨在简化并行策略搜索,提高大规模模型训练效率。文章探讨了大模型带来的挑战及现有框架的局限性,详细说明了MindSpore如何通过技术创新解决这些问题,实现高效的大模型训练。
516 20
【AI系统】昇思MindSpore并行
|
人工智能 测试技术 API
FlagEvalMM:智源开源的多模态模型评测框架
FlagEvalMM 是由北京智源人工智能研究院开源的多模态模型评测框架,旨在全面评估处理文本、图像、视频等多种模态的模型。该框架支持多种任务和指标,采用评测与模型推理解耦的设计,提升评测效率,便于快速适配新任务和模型。
1016 11
FlagEvalMM:智源开源的多模态模型评测框架
|
机器学习/深度学习 人工智能 开发者
【AI系统】昇思 MindSpore 关键特性
本文介绍华为自研AI框架昇思MindSpore,一个面向全场景的AI计算框架,旨在提供统一、高效、安全的平台,支持AI算法研究与生产部署。文章详细阐述了MindSpore的定位、架构、特性及在端边云全场景下的应用优势,强调其动静态图统一、联邦学习支持及高性能优化等亮点。
751 7
【AI系统】昇思 MindSpore 关键特性
|
机器学习/深度学习 算法 数据处理
SVM的优缺点是什么
SVM的优缺点是什么
1685 9
|
缓存 监控 Linux
掌握Linux性能分析:深入探索perf工具
【10月更文挑战第26天】
1060 1