在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
keys命令的用法: keys pattern 查找符合正则匹配的key的列表。扫描对象是Redis服务中所有的key,想想都很慢对不对? 所以,生产环境中,建议直接禁用keys命令。 Keys命令的替代方案1、scan扫描,避免阻塞 Keys命令在Redis Cluster中是怎样执行的?一般来说,keys命令对于集群节点来说,是不知道路由到哪个节点的,不像 get命令。在Java的Jedis客户端的 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命令大概执行了
根据节点信息,我们看到,每个节点存储了 根据我的理解,既然keys命令返回的是key值,而集群中其实有一个结构 按照这种猜想,假如此时Redis节点占用内存为3G,且Key数量成比例,那么Keys命令执行时间因为3s左右,这段时间Redis节点是阻塞的。 到此这篇关于浅谈Redis的keys命令到底有多慢的文章就介绍到这了,更多相关Redis keys命令内容请搜索极客世界以前的文章或继续浏览下面的相关文章希望大家以后多多支持极客世界! |
请发表评论