5

一日一技:可视化分析 Redis Key 资源占用情况

 3 years ago
source link: https://www.kingname.info/2021/02/26/redis-dashboard/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

一日一技:可视化分析 Redis Key 资源占用情况

发表于

2021-02-26

|

更新于 2021-05-14

| 分类于 Redis

| 评论数: 0

Redis 在日常的开发中,会积累大量的 Key,占用不少内存空间。有时候,我们想知道当前 Redis 里面有多少个 Key,是哪个 Key 占用了最大的内存。

但是,我们知道,由于 Redis 是单线程数据库,所以在线上环境是绝对禁止使用keys *这种命令的,因为它会花费很长时间扫描所有的 Key,在这个过程中,Redis 会卡死,无法处理其他的读写操作。

那么,我们应该怎么知道当前有多少个 Key 呢?有同学说可以使用scan命令。但这个命令一方面是需要写程序来迭代,另一方面是它给出的结果可能是不准确的。

也有同学会说,可以使用info keyspace命令,运行效果如下图所示:

2021-02-26-20-48-27.png

确实可以看到有多少个 Key。不过另一个问题是,怎么知道哪个 Key 占用的内存空间最大?

还有时候,Redis 里面可能有几万十几万个 Key,里面有些 Key 是可以删掉的。但是由于我们不能使用keys命令查看当前有哪些 Key,所以不知道这些可以删掉的 Key 竟然还在。

实际上,这些问题,我们使用一个叫做RDR的工具,都可以解决。在 RDR 的 Github 上,可以找到对应系统的可执行文件。我们以 Linux 版本为例来进行说明。Linux 版本的可执行文件地址为:https://github.com/xueqiu/rdr/releases/download/v0.0.1/rdr-linux,下载以后,赋予可执行权限:

cd ~
wget https://github.com/xueqiu/rdr/releases/download/v0.0.1/rdr-linux
chmod +x rdr-linux

接下来,我们需要找到 dump.rdb文件。

Redis 默认开启了RDB方式的持久化储存。满足一定条件时,Redis 会把内存中的数据存放到硬盘中,防止由于突然断电导致数据丢失。默认情况下,RDB 文件在/var/lib/redis/dump.rdb,这个文件只有 root 用户可以读取。

如果你现在不是 root 用户,那么你可以把它复制出来,修改成当前用户,我的 Linux 系统当前用户名叫做 kingname,所在的用户组也叫 kingname,所以可以执行如下 shell 命令:

cd ~
sudo cp /var/lib/redis/dump.rdb ./
sudo chown kingname:kinganme dump.rdb

修改了用户以后,现在我们让 RDR 来读取这个RDB 文件:

./rdr-linux show -p 8766 dump.rdb

运行效果如下图所示:

2021-02-26-20-57-12.png

现在,打开浏览器,打开http://IP:8766,就可以看到当前 Redis 的各个 Key 的统计信息:

2021-02-26-20-58-22.png

不仅可以看到Redis 有哪些 Key,还能看到每个 Key 里面有多少元素,大小是多少。

而且由于是分析的 RDB 文件,所以也完全不需要担心对线上数据造成任何影响。

有了这个工具以后,要找出占用空间最大的 Key,就非常简单了。

谢乾坤 | Kingname wechat
第一时间获取最新文章更新,请订阅我的微信公众号:未闻Code

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK