Redis --- 从海量Key里面查询出某一固定前缀

留言细节

摸清数据规模,即问清楚边界

使用 keys 对线上的业务的影响

KEYS pattern : 查询所有符号给定模式pattern 的key

dbsize 查看数据量

批量生成Redis的测试数据

1、linux Bash 下面执行

for((i=1;i<=20000000;i++));do echo "set k$i v$i " >> /tmp/redisTest ;done;

生成2千万条批量测试kv的语句(key=kn)(value=vn) 写入到/tmp目录下的redisTest.txt 文件中

2、用vim去掉行尾的^M符号,使用方式如下:

vim /temp/redisTest

:set fileformat=dos #设置文件格式,通过这句话去掉行尾的^M符号

: : wq 保存退出

3、通过Redis提供的管道--pipe形式,去跑Redis,传入文件指令批量灌输数据,需要花十分钟左右

cat /temp/redisTest.txt | 路径/redis-5.0.0/src/redis-cli -h 主机ip -p 端口号pipe

一、使用keys k1*

当Redis中的key非常多的时候,对内存的消化,和Redis服务器是一个隐患

KEYS 指令一次性返回所有匹配的key

键的数量过于大会使服务卡顿

二、SCAN cursor [MATCH pattern] [COUNT count]

基于游标的迭代器,需要基于上一次的游标延续之前的迭代过程

以0作为游标开始一次新的迭代,直到命令返回游标0完成一次遍历

不保证每次执行都返回某个给定数量的元素,支持模糊查询

一次返回的数量不可控,只能是大概率符号count参数

clear 

scan 0 match k1*  count 10  传入0 代表 ,刚开始进行迭代

返回两个,第一个参数代表游标,就是迭代到了哪

第二个参数是返回key的结果集。

但是每次返回的cousor 都是不一定是递增的,可能查询到重复的数据。

所以我们需要在代码层面去重,可以把数据存入HashSet 里面

猜你喜欢

转载自blog.csdn.net/xinbumi/article/details/89741047