使用rdbtools分析redis内存使用

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 阿里云redis内存使用持续飙升,需要分析下内存使用情况,有发现[redis-rdb-tools](https://github.com/sripathikrishnan/redis-rdb-tools),支持对rdb文件分析,以下是使用的简单总结。

介绍

阿里云redis内存使用持续飙升,需要分析下内存使用情况,有发现redis-rdb-tools,支持对rdb文件分析,主要功能有:

  • Generate a Memory Report of your data across all databases and keys
  • Convert dump files to JSON
  • Compare two dump files using standard diff tools

实现

安装

[root@xxx redis]# pip install rdbtools python-lzf
[root@xxx redis]# git clone https://github.com/sripathikrishnan/redis-rdb-tools
[root@xxx redis]# cd redis-rdb-tools
[root@xxx redis]# python setup.py install

参数说明

[root@xxx redis]# rdb --help
Usage: rdb [options] /path/to/dump.rdb

Example : rdb --command json -k "user.*" /var/redis/6379/dump.rdb

Options:
  -h, --help            show this help message and exit
  -c FILE, --command=FILE
                        Command to execute. Valid commands are json, diff,
                        justkeys, justkeyvals, memory and protocol
  -f FILE, --file=FILE  Output file
  -n DBS, --db=DBS      Database Number. Multiple databases can be provided.
                        If not specified, all databases will be included.
  -k KEYS, --key=KEYS   Keys to export. This can be a regular expression
  -o NOT_KEYS, --not-key=NOT_KEYS
                        Keys Not to export. This can be a regular expression
  -t TYPES, --type=TYPES
                        Data types to include. Possible values are string,
                        hash, set, sortedset, list. Multiple typees can be
                        provided.                      If not specified, all
                        data types will be returned
  -b BYTES, --bytes=BYTES
                        Limit memory output to keys greater to or equal to
                        this value (in bytes)
  -l LARGEST, --largest=LARGEST
                        Limit memory output to only the top N keys (by size)
  -e ESCAPE, --escape=ESCAPE
                        Escape strings to encoding: raw (default), print,
                        utf8, or base64.

生成csv报告

生成报表字段有database(key在redis的db)、type(key类型)、key(key值)、size_in_bytes(key的内存大小)、encoding(value的存储编码形式)、num_elements(key中的value的个数)、len_largest_element(key中的value的长度),可以创建个表的导入到关系型库用SQL语句分析。

[root@xxx redis]# rdb -c memory hins3537653_data_20180427002229.rdb > memory.csv
mysql> CREATE TABLE `redis_memory` (
    -> id int NOT NULL PRIMARY KEY,
    ->   `database` int(128) DEFAULT NULL comment 'key在redis的db',
    ->   `type` varchar(128) DEFAULT NULL comment 'key类型',
    ->   `key` varchar(128) UNIQUE KEY comment 'key值',
    ->   `size_in_bytes` bigint(20) DEFAULT NULL comment 'key的内存大小',
    ->   `encoding` varchar(128) DEFAULT NULL comment 'value的存储编码形式',
    ->   `num_elements` bigint(20) DEFAULT NULL comment 'key中的value的个数',
    ->   `len_largest_element` varchar(128) DEFAULT NULL comment 'key中的value的长度'
    -> );

解析指定key

[root@xxx redis]# rdb --command justkeyvals --key "02796f8159cabac4*" /mnt/redis/hins3537653_data_20180427002229.rdb 

解析特定字符打头指定类型的key

[root@xxx  redis]# rdb -c json --db 0 --type string --key "02796f8159cabac4*" /mnt/redis/hins3537653_data_20180427002229.rdb 

根据使用内存大小排序

-n是按照数字大小排序,-r是以相反顺序,-k是指定需要爱排序的栏位,-t指定栏位分隔符为冒号

[root@xxx redis]# sort -t, -k4nr memory.csv

总结

现在是手动实现,可以调用阿里云API实现自动采集和分析后入库,前端接入grafana展示,实现对redis数据使用的监控系统化,同时接入钉钉机器人报警主动推送给业务组优化(后续更新)。

参照

redis-rdb-tools
使用rdbtools工具来解析redis dump.rdb文件及内存使用量

目录
相关文章
|
运维 NoSQL 测试技术
Redis:内存陡增100%深度复盘
本文深度分析了Redis内存陡增100%的一些细节和解决方案。
377 1
Redis:内存陡增100%深度复盘
|
5月前
|
存储 弹性计算 缓存
阿里云服务器ECS经济型、通用算力、计算型、通用和内存型选购指南及使用场景分析
本文详细解析阿里云ECS服务器的经济型、通用算力型、计算型、通用型和内存型实例的区别及适用场景,涵盖性能特点、配置比例与实际应用,助你根据业务需求精准选型,提升资源利用率并降低成本。
446 3
|
1月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
347 5
|
1月前
|
设计模式 缓存 Java
【JUC】(4)从JMM内存模型的角度来分析CAS并发性问题
本篇文章将从JMM内存模型的角度来分析CAS并发性问题; 内容包含:介绍JMM、CAS、balking犹豫模式、二次检查锁、指令重排问题
108 1
|
2月前
|
存储 缓存 NoSQL
工作 10 年!Redis 内存淘汰策略 LRU 和传统 LRU 差异,还傻傻分不清
小富带你深入解析Redis内存淘汰机制:LRU与LFU算法原理、实现方式及核心区别。揭秘Redis为何采用“近似LRU”,LFU如何解决频率老化问题,并结合实际场景教你如何选择合适策略,提升缓存命中率。
392 3
|
4月前
|
存储 人工智能 自然语言处理
AI代理内存消耗过大?9种优化策略对比分析
在AI代理系统中,多代理协作虽能提升整体准确性,但真正决定性能的关键因素之一是**内存管理**。随着对话深度和长度的增加,内存消耗呈指数级增长,主要源于历史上下文、工具调用记录、数据库查询结果等组件的持续积累。本文深入探讨了从基础到高级的九种内存优化技术,涵盖顺序存储、滑动窗口、摘要型内存、基于检索的系统、内存增强变换器、分层优化、图形化记忆网络、压缩整合策略以及类操作系统内存管理。通过统一框架下的代码实现与性能评估,分析了每种技术的适用场景与局限性,为构建高效、可扩展的AI代理系统提供了系统性的优化路径和技术参考。
251 4
AI代理内存消耗过大?9种优化策略对比分析
|
5月前
|
存储 监控 NoSQL
流量洪峰应对术:Redis持久化策略与内存压测避坑指南
本文深入解析Redis持久化策略与内存优化技巧,涵盖RDB快照机制、AOF重写原理及混合持久化实践。通过实测数据揭示bgsave内存翻倍风险、Hash结构内存节省方案,并提供高并发场景下的主从复制冲突解决策略。结合压测工具链构建与故障恢复演练,总结出生产环境最佳实践清单。
185 9
|
7月前
|
存储 NoSQL Redis
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 +  无锁架构 +  EDA架构  + 异步日志 + 集群架构
|
6月前
|
缓存 NoSQL 关系型数据库
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?