Redis(高阶篇)02章——BigKey

一、面试题

  1. 阿里广告平台,海量数据里查询某一个固定前缀的key
  2. 小红书,你如何生产上限制 keys* /flushdb/flushall等危险命令以防止阻塞或误删数据?
  3. 美团,memory usage命令你用过吗?
  4. BigKey问题,多大算big?你如何发现?如何删除?如何处理?
  5. BigKey你做过调优吗?惰性释放lazyfree了解过吗?
  6. morekey问题,生产上redis数据库有1000W记录,你如何遍历数据? keys *可以吗?

二、MoreKey案例

(1)大批量往redis里面插入2000W测试数据key

2.1.1Linux Bash下面执行,插入100W数据

  1. 生成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;

2.1.2通过redis提供的管道-pipe命令插入100W大批量数据

复制代码
cat /tmp/redisTest.txt | redis-cli -h 127.0.0.1 -p 6379 -a 111111 --pipe

(2)某快递巨头真实生产案例新闻

2.2.1新闻

2.2.2keys * 试试100W花费多少秒遍历查询

2.2.3生产上限制 keys * /flushdb/flushall等危险命令以防止误删误用?

  1. 输入keys */flushdb/flushall等命令时,同时按下Tab键会有提示
  2. 通过配置设置禁用这些命令,redis.conf在SECURITY这一项中

(3)不用keys *避免卡顿,那该用什么

2.3.1scan命令登场

  1. SCAN | Docs
  2. Redis SCAN 命令 递增地遍历key空间
  3. 一句话,类似MySQL limit,但是不完全相同

2.3.2Scan命令用于迭代数据库中的数据库键

  1. 语法
  2. 特点
  3. 使用

三、BigKey案例

(1)多大算Big

通常我们说的BigKey,不是在值的Key很大,而是指的Key对应的value很大

3.1.1参考《阿里云Redis开发规范》

3.1.2string和二级结构

(1)string是value,最大512MB但是≥10KB就是bigkey
(2)list、hash、set和zset,value个数超过5000就是bigkey

(2)哪些危害

  1. 内存不均,集群迁移困难
  2. 超时删除,大key删除作梗
  3. 网络流量阻塞

(3)如何产生

(4)如何发现

3.4.1redis-cli --bigkey

3.4.2memory usage 键

  1. 英文官网:MEMORY USAGE | Docs
  2. 中文官网:MEMORY USAGE | Docs
  3. 计算每个键值的字节数

(5)如何删除

3.5.1参考《阿里云Redis开发规范》

3.5.2官网

  1. SCAN | Docs
  2. Redis SCAN 命令 递增地遍历key空间

3.5.3普通命令

(1)String

一般用del,如果过于庞大使用unlink key 删除

(2)hash
  1. 使用hscan每次获取少量field-value,再使用hdel删除每个field
  2. 命令
  3. 阿里手册
(3)list
  1. 使用ltrim渐进式逐步删除,直到全部删除完成
  2. 命令
  3. 阿里手册
(4)set
  1. 使用sscan每次获取部分元素,在使用srem命令删除每个元素
  2. 命令
  3. 阿里手册
(5)zset
  1. 使用zscan每次获取部分元素,在使用zremrangebyrank命令删除每个元素
  2. 命令
  3. 阿里手册

四、BigKey生产调优

redis.conf配置文件LAZY FREEING相关说明

  1. 阻塞和非阻塞删除命令:
  2. 优化配置
相关推荐
码农小站1 小时前
ClickHouse 时间范围查询:精准筛选「本月数据」
数据库
paopaokaka_luck2 小时前
基于SpringBoot+Vue的非遗文化传承管理系统(websocket即时通讯、协同过滤算法、支付宝沙盒支付、可分享链接、功能量非常大)
java·数据库·vue.js·spring boot·后端·spring·小程序
小疯仔2 小时前
navicat导出数据库的表结构
数据库
TOSUN同星2 小时前
干货分享 | TSMaster DBC编辑器操作指南:功能详解+实战示例
数据库·oracle·编辑器·汽车·软件工程
huihui4503 小时前
一天一道Sql题(day01)
数据库
~尼卡~3 小时前
软考(软件设计师)数据库原理:事务管理,备份恢复,并发控制
数据库·软件设计师-软考
八九燕来3 小时前
Django双下划线查询
数据库·django·sqlite
眠りたいです4 小时前
Mysql常用内置函数,复合查询及内外连接
linux·数据库·c++·mysql
paopaokaka_luck4 小时前
智能推荐社交分享小程序(websocket即时通讯、协同过滤算法、时间衰减因子模型、热度得分算法)
数据库·vue.js·spring boot·后端·websocket·小程序
He.ZaoCha5 小时前
函数-1-字符串函数
数据库·sql·mysql