1、常见面试题:
- 1.阿里的广告平台,海量数据里面查询某一固定前缀的key
- 2.小红书,如何在生产
限制keys*/flushdb/flushall等危险命令以防止误删除误使用
- 3.美团,MEMORU USAGE命令你使用过吗
- 4.Bikey问题,多大算big?你如何发现?如何删除?如何处理
- 5.BigKey你做过调优吗?惰性释放lazyfree了解过吗
- 6.MoreKey问题。
生产上redis数据库有1000W记录,你如何遍历?key*可以吗?
2、MorKey问题:
2.1.数据准备:
大批量往Redis中插入2000W数据测试key
- 1.Linux Bash下面执行如下命令,是将100万条命令写入到temp目录下的一个临时文件中:
- 2.通过redis提供的管道–prpe命令插入1000W大批量数据
- 3.查看Redis中key的数量:
2.2.某快递巨头真实生产案例:
a.新闻内容:
b. key*:你试试100wh花费多少秒遍历查询:
- 1.
key*
:这个命令有致命的弊端,在生产环境中,最好不要使用 - 2.禁用原因:
c. 生产上限制key*/flushdb/flushall等危险命令以防止误删误用:
- 1.通过配置设置禁用这些命令,
redis.conf
配置文件中在SEURITY
这一项中 - 2.配置如下:
2.3.不适用key*避免卡顿,那应该用什么?
a.scan命令:
使用 Scan命令用于迭代数据库中的数据库键
- 1.英文地址介绍
- 2.中文地址介绍
b.语法:
c.特点:
d.使用:
3、BigKey:
3.1.多大的算BigKey
参考 《阿里云Redis开发规范》
3.2.String和二级结构:
1.BigKey不仅仅说的是key很大,
还有可能是value过大
- 1.string 是value,最大512MB但是 >=
10KB 就是bigkey
- 2
.list、hash、set和zset
个数超过5000就是bigkey
3.3.BigKey危害:
- 1.内存不均,集群迁移困难
- 2.超时删除,大key导致阻塞
- 3.网络流量阻塞
3.4.BigKey如何产生
- 1.社交类:明星的粉丝列表逐步递增:
- 2.汇总统计:某个报表,经年累月的积累
3.5.BigKey如何发现
a.命令:redis-cli --bigkeys
1.好处:
- 给出每种数据结构Top 1 bigkey,同时给出每种数据类型的键值个数+平均大小
2.不足
想查询大于10kb的所有key,--bigkeys参数就无能为力了
,需要用到memory usage来计算每个键值的字节数
redis-cli --bigkeys
redis-cli -h 127.0.0.1 -p 6379 -a 111111 --bigkeys
//每隔 100 条 scan 指令就会休眠 0.1s,ops 就不会剧烈抬升,但是扫描的时间会变长
redis-cli -h 127.0.0.1 -p 7001 –-bigkeys -i 0.1
b.命令memory usage
1.
计算每个键值的字节数
3 .6.删除bigkey
a.String
- 1.一般用
del
,过于庞大使用unlink
b.hash
- 1.使用
hscan
每次获取少量field-value
,再使用hdel删除每个field
- 2.语法
- 3.阿里手册:
c.list:
- 1.使用
ltrim 渐进式逐步删除,直到全部删除
- 2.命令:
- 3.阿里手册:
d.set
- 1.使用
sscan
每次获取部分元素,再使用srem
命令删除每个元素 - 2.命令:
- 3.阿里手册:
e.zset
- 1.使用
zscan每次获取部分元素,再使用ZREMRANGEBYRANK 命令删除每个元素
- 2.命令:
- 3.阿里手册: