当前位置: 首页 > 科技观察

每日一技能:可视化分析RedisKey资源占用

时间:2023-03-17 21:32:13 科技观察

Redis在日常开发中会积累大量Key,占用大量内存空间。有时候,我们想知道Redis中当前有多少个key,哪个key占用的内存最多。但是我们知道,由于Redis是单线程数据库,所以在线上环境中绝对禁止使用keys*命令,因为扫描所有key需要很长时间。在这个过程中,Redis会卡住,无法处理其他的读写操作。那么,我们应该如何知道当前有多少个Key呢?有同学说我们可以用scan命令。但是一方面,这个命令需要写程序来迭代,另一方面,它给出的结果可能不准确。也有同学会说可以用infokeyspace命令,运行效果如下图:确实可以看到有多少个key。但是另一个问题是,怎么知道哪个key占用的内存空间最大呢?有的时候,Redis中可能有几万、几十万个key,有的可以删掉。但是由于我们不能使用keys命令查看当前有哪些key,所以我们不知道这些可以删除的key是否还存在。事实上,这些问题可以通过使用一个叫做RDR[1]的工具来解决。在RDR的Github上,可以找到对应系统的可执行文件。下面以Linux版本为例进行说明。Linux版本的可执行文件地址为:https://github.com/xueqiu/rdr/releases/download/v0.0.1/rdr-linux,下载后授予可执行权限:cd~wgethttps://github.com/xueqiu/rdr/releases/download/v0.0.1/rdr-linuxchmod+xrdr-linux接下来我们需要找到dump.rdb文件。Redis默认启用RDB持久化存储。当满足某些条件时,Redis会将内存中的数据存储到硬盘中,防止突然断电导致数据丢失。RDB文件默认在/var/lib/redis/dump.rdb中,只有root用户可以读取。如果不是root用户,可以复制出来改成当前用户。我的linux系统当前用户名为kingname,所属用户组也叫kingname,所以可以执行如下shell命令:cd~sudocp/var/lib/redis/dump.rdb./sudochownkingname:kinganmedump.rdb修改用户后,现在我们让RDR读取这个RDB文件:./rdr-linuxshow-p8766dump.rdb运行效果如下图所示:现在,打开浏览器,打开http://IP:8766,你可以看到Redis当前每个Key的统计信息:不仅可以看到Redis有哪些Key,还可以看到每个Key有多少个元素和大小。并且因为是解析出来的RDB文件,所以不用担心对线上数据有什么影响。有了这个工具,就可以很简单的找到占用空间最大的Key。参考文献[1]RDR:https://github.com/xueqiu/rdr本文转载自微信公众号“未闻之码”,可通过以下二维码关注。转载本文请联系Code公众号。