Redis查找指令——SCAN

本文详细介绍了Redis中的SCAN命令,包括其作为keys命令替代的原因、使用方法、不同类型的scan指令(如zscan、hscan、sscan)以及如何处理中途停止的迭代。重点强调了迭代何时结束的判断条件是游标返回值为0,而不是结果集为空。此外,还讨论了SCAN命令的时间复杂度,每次执行为O(1),完整迭代为O(N)。
摘要由CSDN通过智能技术生成

目录

 

1、keys键命令缺点

2、引入scan命令

3、scan使用

4、更多scan指令

5、允许中途停止迭代

6、迭代什么时候终结

7、时间复杂度


1、keys键命令缺点

    Redis 提供了一个简单暴力的指令 keys 用来列出所有满足特定正则字符串规则的key。keys指令使用非常简单,提供一个简单的正则字符串即可,但是有很明显的两个缺点:
    1)没有 offset、limit 参数,一次性吐出所有满足条件的 key,如果实例中有几百万个key满足条件,那就可能导致满屏的字符串刷的没有尽头;
    2)keys算法是遍历算法,复杂度是 O(n),如果实例中有千万级以上的 key,这个指令就会导致Redis服务卡顿,甚至造成阻塞,因为Redis是单线程程序,顺序执行所有指令,其它指令必须等到当前的 keys 指令执行完了才可以继续。
    所以,生产环境一般是屏蔽keys命令的。

2、引入scan命令

    SCAN命令是一个基于游标的迭代器。这里的意思是:命令每次被调用都需要使用上一次该调用返回的游标作为本次调用的游标参数,以此来延续之前的迭代过程。当设置SCAN命令的游标参数为0时,服务器将开始一次新的迭代;而当redis服务器向用户返回值为0的游标时,表示迭代已结束,这是唯一迭代结束的判定方式,而不能通过返回结果集是否为空判断迭代结束
scan相比keys具备有以下优点:
    1)复杂度虽然也是 O(n),但是它是通过游标分步进行的,不会阻塞线程;
    2)提供 limit 参数,可以控制每次返回结果的最大
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值