Redis AOF和RDB内容解析

版权声明:本文为原创文章,转载请标明出处。 https://blog.csdn.net/zwjzqqb/article/details/79968741

AOF 解析

Append Only File 是一个文本文件,而且是dos格式的,dos格式……
可以使用nodejs来解析AOF文件,将其格式化成redis的命令流
安装解析工具:

cd /tmp/
wget https://nodejs.org/dist/v8.11.1/node-v8.11.1-linux-x64.tar.xz
# 下载nodejs
cd /usr/local/
tar -xf /tmp/node-v8.11.1-linux-x64.tar.xz
cp -av /usr/local/node-v8.11.1-linux-x64/bin/node /usr/bin/
# 解压安装
cd /usr/local/node-v8.11.1-linux-x64/bin/
./npm install -g waoffle
# 安装waoffle插件

# 将npm工具安装出来的目录打成tar包
# 其他主机直接安装nodejs和该tar包,免网络下载安装:
# mkdir /usr/lib/node_modules
# cd /usr/lib/node_modules
# tar -xf /tmp/waoffle.tar.gz
# ln -s /usr/lib/node_modules/waoffle/lib/parse.js /usr/bin/waoffle
# ln -s /usr/lib/node_modules/waoffle/lib/generate.js /usr/bin/rwaoffle

使用waoffle命令将AOF文件格式化成redis的命令流:

waoffle < 101_appendonly.aof > 101.txt
# 将一个AOF文件输入重定向到waoffle
# 将结果输出重定向到一个文件中

使用rwaoffle命令将redis的命令流格式化成AOF格式:

cat 101.txt |rwaoffle |redis-cli -h 192.168.77.100 -p 7000 --pipe
# 使用 --pipe 参数,将标准输出流的AOF格式化数据直接装入到redis实例中
# 测试没有成功,已经有AOF文件就不要折腾了,直接使用原AOF文件导入即可
# 即 cat appendonly.aof|redis-cli -h 192.168.77.100 -p 7000 --pipe

RDB 解析

RDB是一个data文件,redis-rdb-tools工具可以解析其内容,使用python写的一个工具
该工具的源码地址:https://github.com/sripathikrishnan/redis-rdb-tools/
相应用法样例可以在源码的README.md中找到,想当详细

安装redis-rdb-tools工具:

yum -y install python-setuptools
easy_install pip
pip install rdbtools
# 安装pip,然后使用pip安装redis-rdb-tools工具

简单应用:

# 查看帮助
rdb --help

# 解析dump文件并以JSON格式标准输出
rdb -c json dump.rdb -f output1.txt

# 只解析符合正则的keys,生成json格式的输出
rdb -c json --key "{GYZ_FANS_}INFO_LIKE_26528321_FANS*" dump.rdb -f output2.txt

# 输出csv格式的整个内存的使用情况报告
rdb -c memory dump.rdb -f output3.csv
# 生成的报告格式为:
# database,type,key,size_in_bytes,encoding,num_elements,len_largest_element
#   数据库,类型, 键,   容量/bytes,    编码,    元素数量,       最大元素长度

cat output3.csv |\
awk -F, '{if($4>1024*1024) print $4/1024/1024" MB Key: "$3" Type: "$2}'|\
sort -nrk1|head|column -t
# 根据内存使用进行排序,查看最大的key信息
# 只会展示内存使用大于1M的key

# 输出top 10的key的csv格式的报告,按照内存使用量排序的top
rdb -c memory dump.rdb -l 10 -f output4.csv

# 使用diff参数,生成格式为:
# db=数据库 键->值 的内容信息
rdb --command diff dump.rdb -f dump1.txt

# 使用protocol参数,将rdb解析成AOF格式
rdb -c protocol dump.rdb -f dump.rdb.aof

使用redis-memory-for-key命令 直接解析当前运行实例的某个key的工具
该命令正常情况下应该在安装redis-rdb-tools时已经安装上

pip install redis
# 查看帮助
redis-memory-for-key --help

# 查询当前某个实例中的某个key的内存使用量
redis-memory-for-key -s 10.75.21.102 -p 7002 {OPREATE_RECORD}_201804
# Key                             {OPREATE_RECORD}_201804
# Bytes                           289539276.0
# Type                            sortedset
# Encoding                        skiplist
# Number of Elements              587113
# Length of Largest Element       422

当确定要查询某一个key的相关信息时,可以使用以下命令:

redis-cli-c -h 10.75.21.102 -p 7002 keys {OPREATE_RECORD}_201804
# 查看该键是否存在
redis-cli-c -h 10.75.21.102 -p 7002 debug object {OPREATE_RECORD}_201804
# Value at:0x7f374d63cdb0 refcount:1 encoding:skiplist serializedlength:234489666 lru:13894947 lru_seconds_idle:1
# 这是一个调试命令,慎用
redis-cli-c -h 10.75.21.102 -p 7002 type {OPREATE_RECORD}_201804
# 查看键的类型
redis-cli-c -h 10.75.21.102 -p 7002 ttl {OPREATE_RECORD}_201804
# 查看使用该key的过期信息

[TOC]

阅读更多

没有更多推荐了,返回首页