Redis的keys命令到底有多慢?
欢迎关注方志朋的博客,回复”666“获面试宝典
来源:https://blog.csdn.net/weixin_37968613/article/details/119065777
keys命令的用法:
keys pattern
查找符合正则匹配的key的列表。扫描对象是Redis服务中所有的key,想想都很慢对不对?同时执行keys命令的同时,Redis进程将被阻塞,无法执行其他命令,假如超过了哨兵的down-after-milliseconds配置,还会进行主从切换,切换过程中,如果主节点恢复正常,还可能出现脑裂等一系列问题。
所以,生产环境中,建议直接禁用keys命令。
Keys命令的替代方案
1、scan扫描,避免阻塞 2、将需要统计的数据放入一个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命令到底有多慢?
这里主要是给大家一个基本的概念,并不是深入剖析。
这是腾讯云上Redis集群服务中,慢查询的日志。我们看到,Keys命令大概执行了250ms ~ 300ms。
根据节点信息,我们看到,每个节点存储了大约153w的key,占用内存300M+,平均每个键值对占用内存0.208KB,合213个字节。
根据我的理解,既然keys命令返回的是key值,而集群中其实有一个结构slots_to_keys 记录着所有key 的, 这只与key的数量有关,与Big key的关系不大。
按照这种猜想,假如此时Redis节点占用内存为3G,且Key数量成比例,那么Keys命令执行时间因为3s左右,这段时间Redis节点是阻塞的。
热门内容:
真正的缓存之王,Google Guava 只是弟弟
频频曝出程序员被抓,我们该如何避免面向监狱编程?
推荐一个 Java 接口快速开发框架
Java 18 要来了,你不会还在用Java 8吧?
最近面试BAT,整理一份面试资料《Java面试BAT通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。
获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。
明天见(。・ω・。)ノ♡
Redis的keys命令到底有多慢?相关推荐
- Redis的KEYS命令引起宕机事件
摘要: 使用 Redis 的开发者必看,吸取教训啊! 原文:Redis 的 KEYS 命令引起 RDS 数据库雪崩,RDS 发生两次宕机,造成几百万的资金损失 作者:陈浩翔 Fundebug经授权转载 ...
- Redis的KEYS命令引起RDS数据库雪崩,RDS发生两次宕机,造成几百万的资金损失
文章目录 第一次宕机 事故影响 原因分析 改进方案 第二次宕机 原因分析 改进方案 总结 Redis开发建议 1.冷热数据分离,不要将所有数据全部都放到Redis中 2.不同的业务数据要分开存储 3. ...
- Redis 数据库keys 命令的模糊查询
文章目录 Redis 数据库keys 命令的模糊查询 1.支持的通配符 2.* 通配符 3.?通配符 4.[ ]匹配 Redis 数据库keys 命令的模糊查询 1.支持的通配符 第一种:* 第二种: ...
- 关于redis的keys命令的性能问题
KEYS pattern 查找所有符合给定模式 pattern 的 key . KEYS * 匹配数据库中所有 key . KEYS h?llo 匹配 hello , hallo 和 hxllo 等. ...
- 老大说:谁再用redis 的 keys命令,立刻给我走人
先看现象 redis-cli keys * | args redis-cli del (error) ERR network error (30.00s) #执行了一条 keys xxxxx* 命令, ...
- redis中KEYS替代命令
在 Redis 中,还有哪些其他命令可以代替 KEYS 命令,实现同样的功能呢?这些命令的复杂度会导致 Redis 变慢吗? 如果想要获取整个实例的所有key,建议使用SCAN命令代替.客户端通过执行 ...
- Redis 键(key) 命令
Redis 键(key) 命令 命令 描述 Redis DEL 命令 该命令用于在 key 存在是删除 key. Redis Dump 命令 序列化给定 key ,并返回被序列化的值. Redis E ...
- 基于Redis的分布式锁到底安全吗?
网上有关Redis分布式锁的文章可谓多如牛毛了,不信的话你可以拿关键词"Redis 分布式锁"随便到哪个搜索引擎上去搜索一下就知道了.这些文章的思路大体相近,给出的实现算法也看似合 ...
- Redis初学:4(Redis的常用命令)
Redis的常用命令 查看所有key keys * 如下图: 插入key set key value 如下图: 取出key对应的value值 get key 如下图: 查看某个key是否存在 exis ...
最新文章
- c# ftp类[转]
- HTML5 基础知识(四)
- TypeError之: unsupported operand type(s) for +: 'dict_values' and 'dict_values
- 去重 属性_赛尔原创@EMNLP2020|开放域对话系统的属性一致性识别
- 【前排选手分享】初赛尾声将至,大神带你最后一搏!
- java设计思想和设计模式,快来收藏!
- Mellanox刘通:开放的理念让Mellanox的优势愈加凸显
- 重新分区_全面解析win10系统硬盘分区怎么调整大小
- Linux Lite下打印机驱动安装及针式打印机校准
- oracle语句中,Oracle 语句中“||”代表什么啊?
- pygame模块实现乌龟吃鱼游戏案例
- PADS 去除走线折角处提示和过孔提示
- 补点C#基础_022_json校验和json在线编辑器-bejson
- 使用Google表格进行网页抓取
- Window10设置图标名、文件名的字体大小方法
- 南大科院Java工程实训
- python函数的用法字帖_Python 3 爬虫之批量下载字帖图片
- Mysql中的事务详解
- 精妙绝伦!阿里资深架构师撰写这份:并发编程,可谓“独具匠心”
- 3675. 唐纳德先生与假骰子
热门文章
- Result Maps collection already contains value for
- ES6语法~解构赋值、箭头函数、class类继承及属性方法、map、set、symbol、rest、new.target、 Object.entries......
- 持续集成(一)为什么我们迫切需要持续集成
- POJ 2112 Optimal Milking(二分+最大流)
- C++ 类的内存分布
- 数据库分享一: MySQL的Innodb缓存相关优化
- Java5中的线程池实例讲解
- [转载]MaxtoCode对.Net程序加密的原理及解密探讨三(实例解密)
- 【Whalepaper】CV论文研读 - OneNet:Towards End-to-End One-Stage Object Detection
- 技术图文:C# 语言中的扩展方法