介紹
阿里云redis內(nèi)存使用持續(xù)飆升傍念,需要分析下內(nèi)存使用情況,有發(fā)現(xiàn)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
實現(xiàn)
安裝
[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
參數(shù)說明
[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的內(nèi)存大小)扣泊、encoding(value的存儲編碼形式)近范、num_elements(key中的value的個數(shù))、len_largest_element(key中的value的長度)延蟹,可以創(chuàng)建個表的導(dǎo)入到關(guān)系型庫用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的內(nèi)存大小',
-> `encoding` varchar(128) DEFAULT NULL comment 'value的存儲編碼形式',
-> `num_elements` bigint(20) DEFAULT NULL comment 'key中的value的個數(shù)',
-> `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
根據(jù)使用內(nèi)存大小排序
-n是按照數(shù)字大小排序,-r是以相反順序阱飘,-k是指定需要愛排序的欄位斥杜,-t指定欄位分隔符為冒號
[root@xxx redis]# sort -t, -k4nr memory.csv
總結(jié)
現(xiàn)在是手動實現(xiàn),可以調(diào)用阿里云API實現(xiàn)自動采集和分析后入庫俯萌,前端接入grafana展示果录,實現(xiàn)對redis數(shù)據(jù)使用的監(jiān)控系統(tǒng)化,同時接入釘釘機器人報警主動推送給業(yè)務(wù)組優(yōu)化(后續(xù)更新)咐熙。