问:从海量数据里查询某一固定前缀的key有哪些方法?linux
keys指令一次性返回全部匹配的key,若是键的数量过大,服务器会卡顿,对内存消耗和redis服务器都是隐患,对线上业务也有影响。redis
keys k1*花了86svim
ps: linux bash 生成批量测试数据 bash
for((i=1;i<=20000000;i++)); do echo "set k$i v$i">> /tmp/redisTest.txt ;done;
而后用vim去掉行尾的^M符号服务器
vim /tmp/redisTest.txt :set fileformat=dos #设置文件格式,经过这句话去掉每行结尾的^M符号 ::wq
最后经过redis的pipeline管道 传入文件的指令批量灌数据测试
cat /tmp/redisTest.txt | /redis-5.0/src/redis-cli -h 127.0.0.1 -p 6379 --pipe
scan cursor [MATCH pattern][COUNT count]3d
示例:第一次,scan 0 match k1* count 10 (服务器是不卡顿的)code
第二次,scan 11534336 match k18 count 10orm
能够在程序里写个循环 一直到游标为0 结束,每次将取到的值放到hashset里面,也达到了去重的效果。blog
由于scan是分批次调用的,整体上时间要比keys要长,可是服务器并不会卡顿。