Redis深入学习笔记-05(keys、scan)

      有时候需要在成千上万的实例key中找到特定前缀的key来进行数据的处理。但是如何在海量的key中找到满足特定条件的key呢?

keys指令:用来列出所有满足特定正则字符串规则的key。

        缺点:没有limit参数,一次性显示出所有满足条件的key,如果数据量比较大的时候,redis是单线程的,其他的指令会延后,造成redis服务卡顿。

scan指令

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

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

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

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

5、返回的结果可能会有重复,需要客户端去重复,这点非常重要;

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

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

        scan提供了三个参数,第一个是cursor 整数值,第二个是key 的正则模式,第三个是遍历的limit hint。第一次遍历时,cursor值为0,然后将返回结果中第一个整数值作为下一次遍历的cursor,一直遍历到返回的cursor值为0时结束。

        上面的 count 1000不是返回的条数,而是限定服务器单次遍历的字典槽位数量,因为不是所有的槽位上都有挂接链表,有些槽位可能是空的,也有些槽位上有多个元素,每一次遍历都会将limit数量的槽位上挂接的所有元素进行模式匹配过滤后,一次性返回给客户端。

大key扫描:redis-cli

        redis提供给了redis-cli命令:redis-cli -h 127.0.0.1 -p 7001 –-bigkeys,如果担心该指令会大幅提升redis的ops,可以增加一个休眠的参数:redis-cli -h 127.0.0.1 -p 7001 –-bigkeys -i 0.1

 

 

 

 


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

失忆机器

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值