本文已参与「新人创作礼」活动,一起开启掘金创作之路。
前言
东北有句名言叫做能动手就别吵吵,虽然听起来简单粗暴,但是不可否认的是带来了高效的解决问题的方式。毕竟吵吵基本上最后的结果就两种:没啥事白吵吵了,真有事那还得动手。所以这种化繁为简的解决问题方式得以在豪爽的东北人之间广为流传。
无独有偶,在软件界也有类似的格言。那就是能可视化就别打命令,能看图就别码字,毕竟打了一堆字真不如一张图来的简单明了。于是作为一个受过高等教育且喜欢偷懒的东北码农,那还说啥,无图无真相,直接上图吧。
需求来源
上来说了一堆调节气氛的话,下面来说说真实的需求:
客户现场redis内存飙升,由于无法远程连接客户现场环境,进而分析redis的内存中占用较大的key,无法进行问题精确定位。而客户大部分也是那种你让他打一个字母,他绝对不会打两个的存在,所以通过命令执行的方式基本上是旷日持久且不见得能达到目的。
所以需要一个可视化的方式来查看redis内存占用大的key的列表,进而定位问题,毕竟看图说话比打命令简单且舒适的多。
解决方案
通过网上的调研,找到了一个比较合适的组件,简单易操作且对客户的redis无任何侵入,客户没有理由不同意,于是说干就干,下面先看看该怎么搞。
依赖:
- redis持久化的rdb文件
- 开源的Redis Data Reveal(rdr)组件
rdb文件
该文件有两个来源:
redis配置的持久化策略,定期会生成一个rdb文件,可以直接拿来分析。
如果未配置rdb持久化策略,则可以在redis shell中执行bgsave命令生成,该命令是异步执行的,不会对当前线程的正常使用造成影响,执行完成后会在相应目录(经过笔者测试是在redis安装目录的同级目录)下生成dump.rdb文件。
由于是异步生成,所以没有执行完成的通知,可以通过查看该文件大小是否变化以及最后修改时间来进行确认,按照笔者的经验,几百兆的rdb文件十几二十秒就可以完成,大家可以作为时间参考。
Redis Data Reveal(rdr)组件
- 废话不说,直接github上下载:项目链接
下载界面如下:
笔者为了方便使用windows进行的操作,下载之后的组件文件以及数据文件如下:
- 执行命令,生成图表
打开cmd或者是powershell找到exe文件的地址,然后执行下列命令:
如果样式如上图,则说明执行成功,打开浏览器输入本地浏览器输入127.0.0.1:8080 即可查看刚刚给redis数据文件做的报表分析结果:
界面上包含饼状图,柱状图以及top排行来从各个维度显示redis中数据的统计,基本上能满足需求,如果感觉top100不能满足你的需求,想看到更多的key,可以使用下列命令查看: