Redis 获取大 key 的几种方式

Redis 获取大 key 的几种方式

author: he xiaodong date: 2019-07-15

Redis在遇到数据量暴增或者业务没处理好的时候,会产生很多大的hash,set,这样的对象对 Redis 的集群数据迁移带来了很大的问题,因为在集群环境下,如果某个 key 太大,会数据导致迁移卡顿。另外在内存分配上,如果一个 key 太大,那么当它需要扩容时,会一次性申请更大的一块内存,这也会导致卡顿。如果这个大 key 被删除,内存会一次性回收,卡顿现象会再一次产生。如果你观察到redis的内存忽上忽下,极有可能是大key导致的。查找到大key一般有三种方式:

Redis 官方命令

Redis在 redis-cli 中提供了这种指令:redis-cli -h 127.0.0.1 -p 7001 –-bigkeys 也可以追加一个休眠参数,防止在查询过程 ops 暴增,使用此命令:redis-cli -h 127.0.0.1 -p 7001–-bigkeys -i 0.1

自己写一个脚本

为了避免对线上 Redis 带来卡顿,这就要用到 scan 指令,对于扫描出来的每一个 key,使用 type 指令获得 key 的类型,然后使用相应数据结构的 size 或者 len 方法来得到它的大小,对于每一种类型,保留大小的前 N 名作为扫描结果展示出来。而可以灵活使用 scan,这个命令甚至有 hscan, sscan 这样的衍生体。

使用第三方工具

暂时业内有大佬写的一个工具:Github Repo

Redis-rdb-cli 工具,最终会生成一个界面工具直观展示结果,可以更好的查看redis的一些运行信息。例如下图这样的: redis 大 key统计

顺带推荐 质量很高的课程, 欢迎扫码购买 -> 赏作者一杯咖啡