Redis之大key问题
BigKey
常见面试题目 你会么?
MoreKey 案例
大批量往redis里面插入2000W测试数据key
Linux Bash下面执行,批量插入100W
for((i=1;i<=100*10000;i++)); do echo "set k$i v$i" >> /tmp/redisTest.txt ;done;
生成100W条redis批量设置kv的语句(key=kn,value=vn)写入到/tmp目录下的redisTest.txt文件中
通过redis提供的管道–pipe命插入100W大批量数据
cat /tmp/redisTest.txt | /opt/redis-7.0.0/src/redis-cli -h 127.0.0.1 -p 6379 -a 111111 --pipe
dbsize 查看key的数目
keys * 遍历100W的数据需要多久?
keys * 命令存在的弊端
生产上限制keys /flushdb/flushall等危险命令以防止误删误用?
通过配置设置禁用这些命令,redis.conf在SECURITY这一项中
不用keys *避免卡顿,那应该用什么操作呢?
scan 命令
用于迭代数据库中的数据库键
实际操作
多少算大key?
阿里开发规范
string是value,最大512M,但是大于等于10KB就是bigkey。list、hash、set和zset,个数超过5000就是bigkey
string和二级结构
BigKey 哪些危害?
- 内存不均,集群迁移困难;
- 超时删除,大key删除作梗;
- 网络流量阻塞
BigKey如何产生?
-
社交类(粉丝列表)
-
汇总统计(某个报表,月日年经年累月的积累)
BigKey如何发现?
redis-cli --bigkeys 与 MEMORY USAGE 键
Memory Usage 键
计算每个键值的字节数
BigKey 如何删除
阿里巴巴开发手册
普通命令
-
String
一般用del,如果过于庞大unlink -
Hash
使用hscan每次获取少量field-value,再使用hdel删除每个field
命令
阿里手册
-
List
使用ltrim渐进式逐步删除,直到全部删除完成
命令
阿里手册
-
Set
使用sscan每次获取部分元素,再使用srem命令删除每个元素
命令
阿里手册
-
Zset
使用zscan每次获取部分元素,再使用ZREMRANGEBYRANK命令删除每个元素
命令
阿里手册
BigKey 生产调优
redis.conf配置文件LAZY FREEING相关说明,惰性删除?? -
阻塞和非阻塞删除命令
非阻塞删除 unlink 阻塞删除 del -
优化配置
视频链接
Redis BigKey