欢迎关注方志朋的博客,回复”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命令到底有多慢?相关推荐

  1. Redis的KEYS命令引起宕机事件

    摘要: 使用 Redis 的开发者必看,吸取教训啊! 原文:Redis 的 KEYS 命令引起 RDS 数据库雪崩,RDS 发生两次宕机,造成几百万的资金损失 作者:陈浩翔 Fundebug经授权转载 ...

  2. Redis的KEYS命令引起RDS数据库雪崩,RDS发生两次宕机,造成几百万的资金损失

    文章目录 第一次宕机 事故影响 原因分析 改进方案 第二次宕机 原因分析 改进方案 总结 Redis开发建议 1.冷热数据分离,不要将所有数据全部都放到Redis中 2.不同的业务数据要分开存储 3. ...

  3. Redis 数据库keys 命令的模糊查询

    文章目录 Redis 数据库keys 命令的模糊查询 1.支持的通配符 2.* 通配符 3.?通配符 4.[ ]匹配 Redis 数据库keys 命令的模糊查询 1.支持的通配符 第一种:* 第二种: ...

  4. 关于redis的keys命令的性能问题

    KEYS pattern 查找所有符合给定模式 pattern 的 key . KEYS * 匹配数据库中所有 key . KEYS h?llo 匹配 hello , hallo 和 hxllo 等. ...

  5. 老大说:谁再用redis 的 keys命令,立刻给我走人

    先看现象 redis-cli keys * | args redis-cli del (error) ERR network error (30.00s) #执行了一条 keys xxxxx* 命令, ...

  6. redis中KEYS替代命令

    在 Redis 中,还有哪些其他命令可以代替 KEYS 命令,实现同样的功能呢?这些命令的复杂度会导致 Redis 变慢吗? 如果想要获取整个实例的所有key,建议使用SCAN命令代替.客户端通过执行 ...

  7. Redis 键(key) 命令

    Redis 键(key) 命令 命令 描述 Redis DEL 命令 该命令用于在 key 存在是删除 key. Redis Dump 命令 序列化给定 key ,并返回被序列化的值. Redis E ...

  8. 基于Redis的分布式锁到底安全吗?

    网上有关Redis分布式锁的文章可谓多如牛毛了,不信的话你可以拿关键词"Redis 分布式锁"随便到哪个搜索引擎上去搜索一下就知道了.这些文章的思路大体相近,给出的实现算法也看似合 ...

  9. Redis初学:4(Redis的常用命令)

    Redis的常用命令 查看所有key keys * 如下图: 插入key set key value 如下图: 取出key对应的value值 get key 如下图: 查看某个key是否存在 exis ...

最新文章

  1. c# ftp类[转]
  2. HTML5 基础知识(四)
  3. TypeError之: unsupported operand type(s) for +: 'dict_values' and 'dict_values
  4. 去重 属性_赛尔原创@EMNLP2020|开放域对话系统的属性一致性识别
  5. 【前排选手分享】初赛尾声将至,大神带你最后一搏!
  6. java设计思想和设计模式,快来收藏!
  7. Mellanox刘通:开放的理念让Mellanox的优势愈加凸显
  8. 重新分区_全面解析win10系统硬盘分区怎么调整大小
  9. Linux Lite下打印机驱动安装及针式打印机校准
  10. oracle语句中,Oracle 语句中“||”代表什么啊?
  11. pygame模块实现乌龟吃鱼游戏案例
  12. PADS 去除走线折角处提示和过孔提示
  13. 补点C#基础_022_json校验和json在线编辑器-bejson
  14. 使用Google表格进行网页抓取
  15. Window10设置图标名、文件名的字体大小方法
  16. 南大科院Java工程实训
  17. python函数的用法字帖_Python 3 爬虫之批量下载字帖图片
  18. Mysql中的事务详解
  19. 精妙绝伦!阿里资深架构师撰写这份:并发编程,可谓“独具匠心”
  20. 3675. 唐纳德先生与假骰子

热门文章

  1. Result Maps collection already contains value for
  2. ES6语法~解构赋值、箭头函数、class类继承及属性方法、map、set、symbol、rest、new.target、 Object.entries......
  3. 持续集成(一)为什么我们迫切需要持续集成
  4. POJ 2112 Optimal Milking(二分+最大流)
  5. C++ 类的内存分布
  6. 数据库分享一: MySQL的Innodb缓存相关优化
  7. Java5中的线程池实例讲解
  8. [转载]MaxtoCode对.Net程序加密的原理及解密探讨三(实例解密)
  9. 【Whalepaper】CV论文研读 - OneNet:Towards End-to-End One-Stage Object Detection
  10. 技术图文:C# 语言中的扩展方法