Redis AOF和RDB内容解析

原创 2018年04月17日 00:38:10

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文件导入即可

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]

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zwjzqqb/article/details/79968741

wu反走样(Anti-aliased)直线

可能有图片或者下载的链接不对,请到原始地址查看.http://dgame.yeah.net=======================================================...
  • vertex
  • vertex
  • 2001-06-05 21:54:00
  • 1433

redis的持久化方式RDB和AOF的区别

1、前言 最近在项目中使用到Redis做缓存,方便多个业务进程之间共享数据。由于Redis的数据都存放在内存中,如果没有配置持久化,redis重启后数据就全丢失了,于是需要开启redis的持久化功...
  • m0_38110132
  • m0_38110132
  • 2017-08-08 14:44:33
  • 2529

redis的 rdb 和 aof 持久化的区别

redis的 rdb 和 aof 持久化的区别 url: http://ptc.35.com/?p=275 aof,rdb是两种 redis持久化的机制。用于crash后,redis的恢复。 r...
  • jackpk
  • jackpk
  • 2014-06-11 17:24:47
  • 23970

Redis持久化存储(AOF与RDB两种模式)

cache-only即只做为“缓存”服务,不持久数据,数据在服务终止后将消失,此模式下也将不存在“数据恢复”的手段,是一种安全性低/效率高/容易扩展的方式; persistence即为内存中的数据...
  • canot
  • canot
  • 2016-10-21 20:39:19
  • 16006

Redis持久化,RDB和AOF

Redis强大的功能很大部分是由于他把数据缓存在内存中,为了使Redis在重启的时候,数据不丢失,就需要已某种方式把数据持久化到磁盘中。Redis持久化的方式有俩种,RDB和AOF。RDB:快照方式,...
  • yingxiake
  • yingxiake
  • 2016-06-14 08:19:02
  • 3633

redis持久化AOF与RDB配置

AOF保存的数据方案时最完整的,如果同时开启了rdb和aof下,会采用aof方式。 (1)设置数据保存到数据文件中的save规则 save 900 1     #900秒时...
  • qq924862077
  • qq924862077
  • 2016-04-01 23:03:13
  • 3588

redis的持久化方式 RDB和AOF

RDB是Snapshot快照存储,半持久化模式 按周期策将数据保持在磁盘(save来定义周期),借助fork命令的copy on write机制。 生成快照时,当前进程会fork一个子进程,然后再子进...
  • weiwenjuan0923
  • weiwenjuan0923
  • 2016-10-21 20:42:08
  • 473

redis 两种持久化方式分析---rdb/aof

redis支持两种持久化的方式,可以单独使用或者结合起来使用      第一种:RDB方式(redis默认的持久化方式)  第二种:AOF方式      一、RDB       rdb方式...
  • preamble_1
  • preamble_1
  • 2017-06-02 16:28:33
  • 401

Redis持久化原理及配置详解(RDB方式和AOF方式)

Redis的强大功能很大程度上是由于其将所有数据都存储在内存中。为了使Redis在重启后仍能保证数据不丢失,需要将数据从内存中以某种形式持久化到硬盘中。Redis支持两种持久化方式,一种是RDB方式,...
  • RobertoHuang
  • RobertoHuang
  • 2017-04-27 11:33:53
  • 1138

面试问题redis rdb 和aof的区别

Redis中数据存储模式有2种:cache-only,persistence; cache-only即只做为“缓存”服务,不持久数据,数据在服务终止后将消失,此模式下也将不存在“数据恢复”的...
  • hxpjava1
  • hxpjava1
  • 2017-08-31 11:59:02
  • 513
收藏助手
不良信息举报
您举报文章:Redis AOF和RDB内容解析
举报原因:
原因补充:

(最多只允许输入30个字)