从海量key中查询出某一固定前缀的key

一 概述

在此我想提一个问题:从海量的key中查询出以某一固定前缀的key中的海量数据指的具体范围是是多小,即具体的数据规模或者是数据的边界是什么。

二 比较容易得到的方案

通过KEYS pattern来查找所有符合给定模式pattern的key,这个我们是可以得到想要的结果的,而且KEYS指令会一次性返回所有匹配的key,使用KEYS命令查询大量的key会对正在运行的业务造成影响,因为一次性返回数量过大的时候会使得服务变得卡顿。

三 利用SCAN增量式迭代命令解决问题

SCAN cursor [MATCH pttern] [Count count] //SCAN是无阻塞模式的提取指令列表,每次只会返回少量元素

命令中的cursor指的是游标,MATCH pattern值得是指令,count参数指定返回的数据个数,但是count并无法严格控制数量。

scan 0 match k1* count 10 //该命令指的是大概率的返回数量为count的且以k1开头的数据

SCAN是一个基于游标的迭代器,每次都需要基于上一次的游标延续之前的迭代过程。此过程中,要求每次查询都会使用上一次返回的游标。

此命令只有当以0作为游标的开始依次进行新的迭代,直至命令返回的游标为0为止,即当返回的游标为0的时候表示整个迭代过程都完成了。

注意:SCAN增量式迭代命令,并不能保证每次执行都返回某个给定数量的元素,可能为0个,当时命令返回的游标不是零,则应用程序就会继续使用上一个游标进行迭代,直至游标值为0,对于较大的数据集每次可能返回数十个数据,对于较小的数据集可能会直接返回所有数据集。

SCAN命令查出的所有命令可能对存在重复的值,所以我们可以利用hashset来实现数据去重。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值