一.BigKey
1.海量数据里如何查询某一固定前缀的key
scan cursor match key* [COUNT count]
2.如何限制keys *, flushdb,flushall等危险命令防止误删除
rename-command keys ""
rename-command flushdb ""
rename-command flushall ""
3.memory usage 命令做什么用
1) 计算每个key占的字节数
2) memory usage key1 [samples 5]
4.Bigkey多大算大?如何发现,如何删除,如何处理
1) 多大算大:字符串不能超10K, hash,list,set,zset不能超5000条
2) 如何发现:
redis-cli -a 111111 -h 127.0.0.1 -p 6379 --bigkeys
# 每隔100条休眠0.1秒,防止剧烈抬升
redis-cli -a 111111 -h 127.0.0.1 -p 6379 --bigkeys -l 0.1
memory usage
3) 如何删除:非字符串的bigkey,不要使用del删除,使用hsacn,sscan,zset渐进删除,同时要注意防止bigkey过期的自动删除,内存不均,集群迁移困难,超时删除,网络阻塞
string: 用del,unlink
hash: hscan + hdel
list: 使用ltrim + del
set: sscan + srem删除
zset: zscan + zremrangebyrank
5.Bigkey调优,懒性释放lazyfree
lazyfree-lazy-server-del yes
replica-lazy-flush no yes
lazyfree-lazy-user-del yes
6.Morekey生产上redis数据库有1000w记录,如何遍历
1) 插入1000万条测试key
for((i=1;i<=100*10000;i++)); do echo "set k$i v$i" >> /tmp/redisTest.txt; done;
2) 导入到redis
cat /tmp/redisTest.txt | redis-cli -h 127.0.0.1 -p 6379 -a 111111 --pipe
3) 查看数量
dbsize
4) 不用keys,用scan
scan 0 math key1 count 10