我的后端学习大纲
我的Redis学习大纲
1、MorKey分析:
1.1.数据准备:
a.大批量往Redis中插入100W数据:
- 1.Linux Bash下面执行如下命令,是将100万条命令写入到temp目录下的一个临时文件中:
- 2.通过redis提供的管道–prpe命令插入100W大批量数据
- 3.查看Redis中key的数量:
100W的数据量直接进行存储过慢,所以采用了这种读取临时文件内容进行存储的形式
1.2.某快递巨头真实生产案例:
a.新闻内容:
b. key*:你试试100wh花费多少秒遍历查询:
- 1.
key*
:这个命令有致命的弊端,在生产环境中,最好不要使用 - 2.禁用原因:
c. 生产上限制key*/flushdb/flushall等危险命令以防止误删误用:
- 1.通过配置设置禁用这些命令,
redis.conf
配置文件中在SEURITY
这一项中 - 2.配置如下:
1.3.不适用key*避免卡顿,那应该用什么?
a.scan命令:
使用 Scan命令用于迭代数据库中的数据库键
- 1.英文地址介绍
- 2.中文地址介绍
b.语法:
c.特点:
d.使用:
2、BigKey分析:
2.1.多大的算BigKey
参考 《阿里云Redis开发规范》
2.2.String和二级结构:
1.BigKey一般不是说的key很大,
而是value过大
- 1.string 是value,最大512MB但是 >=
10KB 就是bigkey
- 2
.list、hash、set和zset
,value个数超过5000就是bigkey
2.3.BigKey危害:
- 1.内存不均,集群迁移困难
- 2.超时删除,大key导致阻塞
- 3.网络流量阻塞
2.4.BigKey如何产生
- 1.社交类:明星的粉丝列表逐步递增:
- 2.汇总统计:某个报表,经年累月的积累
2.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.
计算每个键值的字节数
2.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.阿里手册: