面试题
阿里广告平台,海量数据里查询某一固定前缀的key
小红书,你如何生厂上限值key */flushdb/flushall等危险命令以防止误删误用?
美团,MEMORY USAGE 命令你用过吗?
BigKey问题,多大算big?你如何发现?如何删除?如何处理?
BigKey你做过调优吗?惰性释放lazyfree了解过吗?
Morekey问题,生产上redis数据库有1000w记录,你如何遍历? key * 可以吗?
1.Morekey案例
大批量往redis里面插入2000w测试数据key
1.Linux Bash下面执行,插入100w
生成100W条redis批量设置kv的语句(key=kn,value=vn)写入到/tmp目录下的redisTest.txt文件
for((i=1;i<=100*10000;i++)); do echo "set k$i v$i" >> /tmp/redisTest.txt ;done;
[root@localhost ~]# for((i=1;i<100*10000;i++));do echo "set k$i v$i" >>/tmp/redisTest.txt;done;
[root@localhost ~]#
通过redis提供的管道--pipe命令插入100W大批量数据
[root@localhost myredis]# cat /tmp/redisTest.txt | redis-cli --pipe
All data transferred. Waiting for the last reply...
Last reply received from server.
errors: 0, replies: 999999
[root@localhost myredis]# redis-cli
127.0.0.1:6379> dbsize
(integer) 999999
127.0.0.1:6379>
某快递巨头真实生产案例新闻
key * 你试试100W花费多少秒遍历查询
999991) "k935351"
999992) "k379644"
999993) "k906086"
999994) "k954027"
999995) "k538124"
999996) "k207347"
999997) "k543262"
999998) "k530837"
999999) "k229700"
(2.53s)
127.0.0.1:6379>
Q:生产上怎么限制key */flushdb/flushall等危险命令以防止误删误用?
A:通过配置设置禁用这些命令,redis.conf在SECURITY这一项中
不用key * 避免卡顿,那该用什么
scan命令登场----一句话,类似mysql limit但不完全相同
Scan命令用于迭代数据库中的数据库健
2. BigKey案例
2.1 多大算Big?
参考《阿里云Redis开发规范》
string和二级结构
1、string是value,最大512MB,但是大于等于10KB就是bigkey
2、list、hash、set、和zset,个数超过500就是bigkey
2.2 哪些危害
内存不均,集群迁移困难
超时删除,大key删除作梗
网络流量阻塞
2.3 如何产生
社交类: XXX粉丝列表,典型案例粉丝逐步增加
汇总统计: 某个报表,月日年经年累月的积累