现在偶尔会发现redis里有些key的值有几十MB,这是不正常的数据,有没有办法按value大小排序列出大于10MB所有key?
现在偶尔会发现redis里有些key的值有几十MB,这是不正常的数据,有没有办法按value大小排序列出大于10MB所有key?
补充一下,根据楼上的回答,前面生成的csv导入到数据库中之后,就可以利用sql语句很方便的对Redis的内存数据进行各种分析了。
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 `KEY` from memory WHERE size_in_bytes>12 【这里就是你的value的大小单位是 byte 10m就是 10*1024*1000】
查询结果
下面是我的所有数据
对于string类型的value,直接使用strlen key
hash里的string类型的value也可以使用 strlen key
推荐使用lua脚本,偶尔的查询会很方便,如果是长期进行数据分析,推荐楼上的方法
2 回答2.5k 阅读✓ 已解决
2 回答3.4k 阅读
2 回答1.1k 阅读✓ 已解决
1 回答2.1k 阅读✓ 已解决
2 回答1.4k 阅读
1 回答857 阅读✓ 已解决
2 回答547 阅读✓ 已解决
帮你找了一个工具,经测试可用:https://github.com/sripathikrishnan/redis-rdb-tools#generate-memory-report
安装和使用方法文档上写了,如果安装完成找不到rdb命令的话,直接在安装目录下执行也可以:
结果列中的sizeinbytes就是你要的大小,导出后自己排下序就可以了。另外,注意修改你自己dump.rdb的文件路径。对于数据量太大的情况我没测试过,分析估计会比较慢。