一、 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 指令执行完了才可以继续。

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

Examples:

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

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

DEL key [key ...]

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

返回值

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

Examples

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

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

unlink key [key ...]

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

返回值

integer-reply:unlink的keys的数量.

Examples

复合查询删除使用样例:

模糊匹配要查询的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

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

  1. 运维工程师发展受限,那么运维转型大数据是个机会吗?

    运维工作没意思,运维没有前途,运维会被取代--让很多的运维工程师感受到前途无"亮",随着资本寒冬的来临,以及各种新技术的不断出现,很多运维工程师开始走向了转型的道路.那么在如今的数 ...

  2. 大数据运维:大数据平台+海量数据

    大数据开发独揽大权 大数据技术很早就在BAT这些公司生根发芽,但直到14.15年大数据技术才广泛应用在各大互联网公司,大数据技术由此深入各行各业. 此时大数据开发人才非常紧缺,很多公司大数据从立项,到 ...

  3. kettle分批处理大表数据_采用Kettle分页处理大数据量抽取任务

    需求: 将Oracle数据库中某张表历史数据导入MySQL的一张表里面. 源表(Oracle):table1 目标表(MySQL):table2 数据量:20,000,000 思路: 由于服务器内存资 ...

  4. snm算法_基于SNM算法的大数据量中文地址清洗方法-计算机工程与应用.PDF

    基于SNM算法的大数据量中文地址清洗方法-计算机工程与应用 108 2014 ,50(5 ) Computer Engineering and Applications 计算机工程与应用 基于SNM ...

  5. 如何回答:你对运维(大数据)工作了解多少?被录用后打算如何展开工作?

    关于面试,面试官也是人,人的想法可能千奇百怪,虽然其中有一定的规律可以循,但是不乏意料之外的问题.老师的工作是为学生打开一扇门,让学生自己走进去,不能使劲把分们拉进来,因为走进来必须是学生自己的事情. ...

  6. 大数据运维 (四) 大数据平台运维总结

    大家好,我是脚丫先生 (o^^o) 目前自己在运维方面,主要管理着CDH平台和HDP平台,同时负责着以docker的形式进行产品的交付. 文章目录 0.CDH集群配置.日志.jar包以及安装目录和常用 ...

  7. 上海轨道交通车辆智能运维系统: 大数据+人工智能科技解决方案解决地铁运维新难题 |百万人学AI评选

    2020 无疑是特殊的一年,而 AI 在开年的这场"战疫"中表现出了惊人的力量.站在"新十年"的起点上,CSDN[百万人学AI]评选活动正式启动.本届评选活动在 ...

  8. 运维、大数据常见概念史上最通俗讲解

    很多同学对热备,冷备,云备了解不深,我科普一下 IT 行业各种备份术语.以后别闹笑话了. 假设你是一位女性,你有一位男朋友,于此同时你和另外一位男生暧昧不清,比朋友好,又不是恋人.你随时可以甩了现任男 ...

  9. 安卓,运维,大数据,前端,java,区块链学习路线

    有些人真的是发学习路线,就发该学什么什么,对于小白来说,看懂个毛啊,咋知道你说这么多对不对?咋学啊,买书学? 链接: http://www.atguigu.com/final_gf.shtml#and ...

最新文章

  1. 写一个 iOS 复杂表单的正确姿势
  2. 【Linux】文件特殊权限 SUID/SGID/Sticky Bit
  3. GNU make manual 翻译(六十一)
  4. Unity3d 控制物体移动、旋转、缩放
  5. datasnap 2011连接池,数据集对象池
  6. 大侠稍等!URL 中为何出现奇怪的字符
  7. HTML对字体的操作详解
  8. jaxb list集合对象_JAXB –表示空集合和空集合
  9. AttributeError: module 're' has no attribute 'sub'
  10. win11鼠标怎么在轮滑时只滚动一个屏幕 Windows11鼠标设置轮滑只滚动一个屏幕的步骤方法
  11. Web调取摄像头拍照
  12. 【C语言】有一篇文章,共有3行文字,每行不超过80个字符。要求统计出其中英文大写字母,小写字母,数字,空格以及其它字符的个数。请使用数组实现。
  13. AppleParty(苹果派)v3 支持 App Store 新定价机制 - 批量配置自定价格和销售范围
  14. 领导的沉默,背后到底隐藏着什么?
  15. Balance安装及用法小结
  16. jQuery 实现五星好评
  17. android 删除号码恢复,手机联系人误删了怎么恢复
  18. android 使用Google map api v3 不用申请key!
  19. Linux 网络编程—— libnet库详细使用指南
  20. 大乐透双色球号码自动生成器

热门文章

  1. diy服务器个人主机_Re:从零开始的服务器-微型服务器DIY手记
  2. redis延迟队列 实现_灵感来袭,基于Redis的分布式延迟队列
  3. 成果堪称“诺奖”一夜成名却无法复现的韩春雨,再发高分文章
  4. 漫画:如何做一款比吃鸡还厉害的游戏
  5. MNTD论文修改20211114(Y Zhou)
  6. NSA-LDL论文修改建议20211026BRT
  7. 23种设计模式之迭代器模式
  8. C++ Maps MultiMaps
  9. Spark 报错 : Error: bad symbolic reference. A signature in SparkContext.class refers to term conf
  10. 大数据领域的专精特新“小巨人”中科闻歌