美文网首页
使用rdbtools分析redis内存使用

使用rdbtools分析redis内存使用

作者: 怀刚 | 来源:发表于2018-04-27 23:32 被阅读0次

    介绍

    阿里云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文件及内存使用量

    相关文章

      网友评论

          本文标题:使用rdbtools分析redis内存使用

          本文链接:https://www.haomeiwen.com/subject/qxtwlftx.html