0
点赞
收藏
分享

微信扫一扫

哪些知名软件是Java写的?

问题描述

今天遇到一个 Redis 内存打挂了的问题,想看看哪个前缀 Key 占用内存比较大?!

原因分析

我们都知道如果直接用 Keys 参数去做统计很危险,而且也只能统计数量,当然也可以排序去前几名的占用内存 Key 对应的大小,但是我们的需求是要模糊匹配前缀(属于同一类业务)所占用的内存大小总计

解决方案

方法一

推荐一个工具,通过 dump.rdb 文件进行分析

https://github.com/sripathikrishnan/redis-rdb-tools

1、安装 redis-rdb-tools 工具

wget https://github.com/sripathikrishnan/redis-rdb-tools/archive/master.zip
unzip master
cd redis-rdb-tools-master/
python setup.py install

2、根据 dump.rdb 文件成生内存报告进行分析

# 生成报告
rdb -c memory ./dump.rdb > redis_memory_report.csv

# 根据使用的内存大小进行排序
sort -t, -k4nr redis_memory_report.csv

方法二

  • go版本:go-redis-memory-analysis
  •  php版本:redis-memory-analysis

附加

补充一下,前面生成的 csv 导入到数据库中之后,就可以利用 sql 语句很方便的对 Redis 的内存数据进行各种分析了(当然也可以用 Excel)

DROP TABLE IF EXISTS `memory`;
CREATE TABLE `memory` (
  `DATABASE` int(11) DEFAULT NULL,
  `type` varchar(128) DEFAULT NULL,
  `KEY` varchar(128) DEFAULT NULL,
  `size_in_bytes` int(11) DEFAULT NULL,
  `encoding` varchar(128) DEFAULT NULL,
  `num_elements` int(11) DEFAULT NULL,
  `len_largest_element` varchar(128) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
SET FOREIGN_KEY_CHECKS=1;

这个是建表语句。通过 Navicat 之类的工具导入数据,然后分析

SELECT SUM(size_in_bytes) FROM memory WHERE `KEY` LIKE '%blog:%'

 这个是表中的所有数据

举报

相关推荐

0 条评论