問:從海量數據裏查詢某一固定前綴的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要長,可是服務器並不會卡頓。