key redis 遍历_快乐运维Redis大数据量查询与清理

一、 keys命令(生产环境禁止使用)

简单粗暴,由于Redis单线程这一特性,keys命令是以阻塞的方式执行的,keys是以遍历的方式实现的复杂度是 O(n),Redis库中的key越多,查找实现代价越大,产生的阻塞时间越长。

keys * 、keys codehole* 分别是查询全部的key以及查询前缀为codehole的key。特点太暴力,性能不好,搜索的是整个redis;

缺点:

1、没有 offset、limit 参数,一次性吐出所有满足条件的 key,万一实例中有几百 w 个 key 满足条件,当你看到满屏的字符串刷的没有尽头时,你就知道难受了。

2、keys 算法是遍历算法,复杂度是 O(n),如果实例中有千万级以上的 key,这个指令就会导致 Redis 服务卡顿,所有读写 Redis 的其它的指令都会被延后甚至会超时报错,因为 Redis 是单线程程序,顺序执行所有指令,其它指令必须等到当前的 keys 指令执行完了才可以继续。

50a5b72df79bfd3aa3b634c3a586ee74.png

redis的keys命令,通常在用来删除相关的key时使用,但这个命令有一个弊端,在redis拥有数百万及以上的keys的时候,会执行的比较慢,更为致命的是,这个命令会阻塞redis多路复用的io主线程,如果这个线程阻塞,在此执行之间其他的发送向redis服务端的命令,都会阻塞,从而引发一系列级联反应,导致瞬间响应卡顿,从而引发超时等问题,所以应该在生产环境禁止用使用keys和类似的命令smembers,这种时间复杂度为O(N),且会阻塞主线程的命令,是非常危险的。

所以我们通常在生产环境数据量较大的时候,会选择将keys命令做重命名,禁止误操作。

rename-command KEYS     ""

官方解释:https://redis.io/commands/KEYS

二、 scan命令(生产环境推荐使用)

以非阻塞的方式实现key值的查找,绝大多数情况下是可以替代keys命令的,可选性更强

scan命令的特点:

1、复杂度虽然也是 O(n),但是它是通过游标分步进行的,不会阻塞线程;

2、提供 limit 参数,可以控制每次返回结果的最大条数,limit 只是一个 hint,返回的结果可多可少;

3、同 keys 一样,它也提供模式匹配功能;

4、服务器不需要为游标保存状态,游标的唯一状态就是 scan 返回给客户端的游标整数;

5、返回的结果可能会有重复,需要客户端去重复,这点非常重要;
正常情况下,使用scan没问题,如果正在rehash,则会造成重读
比如现在有四个桶,读了0,1,发生rehash时, 0会到4上,1是到5,造成重读,
redis使用高位递增遍历,如下, 当02,遍历完以后0426肯定是遍历完的
但缩容有可能发成key重复。

6、遍历的过程中如果有数据修改,改动后的数据能不能遍历到是不确定的;

7、单次返回的结果是空的并不意味着遍历结束,而要看返回的游标值是否为零

e41a54016707771366cb4b7276b77687.png

         Examples:

          redis-cli -p 6379 -a password --scan --pattern "name*"

三、DEL命令(生产环境禁止使用)

DEL key [key ...]

删除指定的一批keys,如果删除中的某些key不存在,则直接忽略。

返回值

integer-reply:被删除的keys的数量

         Examples

c6a79f873a4e7b549a51ef1ebc16114d.png

DEL始终在阻止模式下释放值部分.但是,如果该值太大,例如对于大型LIST或HASH的分配太多,它会长时间阻止Redis.

、unlink 命令(生产环境推荐使用)

unlink key [key ...]

该命令和DEL十分相似:删除指定的key(s),若key不存在则该key被跳过。但是,相比DEL会产生阻塞,该命令会在另一个线程中回收内存,因此它是非阻塞的。这也是该命令名字的由来:仅将keys从keyspace元数据中删除,真正的删除会在后续异步操作。

返回值

integer-reply:unlink的keys的数量.

        Examples

27a85d62f7148d2ce6dbfe7e9f1d5d4e.png

复合查询删除使用样例:

模糊匹配要查询的KEY:

redis-cli -p 6379 -a password --scan --pattern "name*"

将刚刚模糊匹配的KEY异步删除:

redis-cli -p 6379 -a password --scan --pattern "name*"|xargs -L 2000 redis-cli -p 6379 -a password unlink

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/512603.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux部分基础命令总结,Linux常用基础命令总结

近期自己学习了一下Linux,写这篇博客以便于对自己的一个总结,记录自己的学习情况,奥利给!想对Linux熟练掌握,就必须学会它的操作命令,虽然可能会花费一些时间,不过从长远的角度来说,…

MaxCompute执行引擎核心技术DAG揭秘

简介: 作为业界少有的EB级数据分布式平台,MaxCompute每天支撑上千万个分布式作业的运行。这些作业特点各异,既有包含数十万计算节点的超大型作业,也有中小规模的分布式作业。不同用户对于不同规模/特点的作业,在运行时…

自定义导航页_带你回归“真”的导航页

曾经浏览器主页是我们流向各大网站的要道从这里我们可以轻而易举的去往想要去的网站特别是在信息和专业性越来聚集的今天传统的主页难免令人有些审美疲劳或者说花里胡哨hao1232345是这些老牌的主页网站有些审美疲劳随着导航越来越细节化广告也越来越多美感也更少360主页qq主页百…

Redis 压缩列表原理与应用分析

作者 | 西瓜来源 | JAVA架构进阶之路摘要Redis是一款著名的key-value内存数据库软件,同时也是一款卓越的数据结构服务软件。它支持字符串、列表、哈希表、集合、有序集合五种数据结构类型,同时每种数据结构类型针对不同的应用场景又支持不同的编码方式。…

基于 MaxCompute 的智能推荐解决方案

简介: 在互联网行业红利已过、在获客成本越来越高、在用户在线时长全网基本无增长以及信息大爆炸的情况下,如何更好的转化新用户和提升老用户粘性就变得至关重要,智能化的个性化推荐无疑是经过验证的重要手段之一,我们每天使用的移…

基于MaxCompute+开放搜索的电商、零售行业搜索开发实践

简介: 搜索一直是电商行业流量来源的核心入口之一,如何搭建电商行业搜索并提升搜索效果,一直是电商行业开发者努力攻克的难题。基于传统数据库或开源引擎虽然能够搭建基础搜索服务,但随着商品数据的增多和业务流量的增长&#xff…

快速搭建实验环境:使用 Terraform 部署 Proxmox 虚拟机

作者 | Addo Zhang来源 | 云原生指北自从用上 m1 的电脑,本地开发环境偶尔会遇到兼容性的问题。比如之前尝试用 Colima 在虚拟机中运行容器运行时和 Kubernetes,其实际使用的还是 aarch64 虚拟机,实际使用还是会有些差异。手上有台之前用的黑…

linux grub 下载,GRUB 2.04发布下载,附新功能介绍

GRUB 2.04版本发布了,它是在GRUB 2.02/2.00的基础上更新的,GRUB 2.02是目前使用得最多的多重启动管理器,全称为GRand Unified Bootloader,使用它可以引导几乎所有的操作系统,包括Unix、Linux、Windows,GRUB…

Go 调用 Java 方案和性能优化分享

简介: 一个基于 Golang 编写的日志收集和清洗的应用需要支持一些基于 JVM 的算子。 作者 | 响风 来源 | 阿里技术公众号 一 背景 一个基于 Golang 编写的日志收集和清洗的应用需要支持一些基于 JVM 的算子。 算子依赖了一些库: Groovy aviatorscript 该应用有如…

低代码发展专访系列之八:低代码平台能够打破企业「应用孤岛」现象吗?

话题:低代码发展系列专访 前言:2019年开始,低代码爆火。有人认为它是第四代编程语言,有人认为它是开发模式的颠覆,也有人认为是企业管理模式的变革……有很多声音,社区讨论很热烈。CSDN随后展开低代码平台产…

redis rdb aof区别_Redis(三):持久化RDB,fork.copyonwrite,AOF,RDBamp;AOF混合使用

Redis的数据全部在内存里,如果突然宕机,数据就会全部丢失,因此必须有一种机制来保证Redis的数据不会因为故障而丢失,这种机制就是Redis的持久化机制。Redis的持久化有两种,第一种是快照,第二种是AOF日志。快…

浅谈 Linux 高负载的系统化分析

简介: 浅谈 Linux 高负载的系统化分析,阿里云系统组工程师杨勇通过对线上各种问题的系统化分析。 讲解 Linux Load 高如何排查的话题属于老生常谈了,但多数文章只是聚焦了几个点,缺少整体排查思路的介绍。所谓 “授人以鱼不如授人…

AI、元宇宙技术方兴未艾,软件测试重装上阵

Larry Bernstain 曾说过“在系统测试阶段找出并修正错误,要比开发者自己完成这一工作多付出 2 倍的努力。而当系统已经交付使用之后找出并修正错误,要比系统测试阶段多付出 9 倍的努力。” 测试用例总结,图片来源:Applause以上我们…

如何快速搭建云原生企业级数据湖架构及实践分享

简介: 众所周知,数据湖技术在大数据领域炙手可热,随着在云上的广泛部署和应用,其业务价值逐渐获得业界共识。如何快搭建数据湖架构被越来越多的企业探讨。本文主要分享快速搭建云原生企业级数据湖架构及实践分享。 王震&#xff0…

5分钟搞定AlertManager接入短信、语音等10+种通知渠道

简介: Alert Manager是开源监控系统Prometheus中用于处理告警信息的服务,通过将日志服务开放告警配置为Alert Manager中的一个Receiver,可以将Alert Manager产生的告警消息发送到日志服务。 SLS告警管理 AlertManager作为Prometheus生态系统…

c语言编程输出数组元素之和,C语言 输出一个数组中,所有元素之和为0的子序列...

本程序用到了一个时间种子,来随机产生10个整数[-5~5],函数是randData( )。还有一个计算子序列为0的函数ZeroSubarray( )。randData( )如下:int arr[10];void randData(int a[], int start, int end){srand(time(NULL));for (int i start; i …

小米百万美金大奖花落机器狗团队,5 年千亿重砸研发鼓励创新

1月4日,第三届小米百万美金技术大奖公布,CyberDog铁蛋四足仿生机器人在 68个参评项目中脱颖而出,一举获得最高奖。值得一提的是,该团队拥有两名 2020 年应届毕业生成员。 小米集团创始人、董事长兼CEO雷军在微博高兴地说道&#x…

日志审计携手DDoS防护助力云上安全

简介: 本文主要介绍日志审计结合DDoS防护保障云上业务安全的新实践。 日志审计携手DDoS防护助力云上安全 1 背景介绍 设想一下,此时你正在高速公路上开车去上班,路上还有其他汽车,总体而言,大家都按照清晰的合法速度…

MySQL 深潜 - 一文详解 MySQL Data Dictionary

简介: 在 MySQL 8.0 之前,Server 层和存储引擎(比如 InnoDB)会各自保留一份元数据(schema name, table definition 等),不仅在信息存储上有着重复冗余,而且可能存在两者之间存储的元…

中国加速计算市场第二名,宁畅正领跑“智能算力定制”赛道

构建“元宇宙”最缺什么?对此,服务器新一线厂商宁畅给出的答案是“定制化算力”。 2022年1月6日,在“创立两周年媒体会”上宁畅透露,伴随IT头部企业进入“元宇宙”赛道,以及宁畅“智定”战略推进,2021年宁…