留言细节
摸清数据规模,即问清楚边界
使用 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 里面