The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Redis::RdbParser - Redis rdb dump file parser

VERSION

version 0.05

SYNOPSIS

 use Redis::RdbParser;

 $parser = new Redis::RdbParser;
 #
 # or
 #
 my $callbacks = {
     "start_rdb"         => \&start_rdb,
     "start_database"    => \&start_database,
     "key"               => \&key,
     "set"               => \&set,
     "start_hash"        => \&start_hash,
     "hset"              => \&hset,
     "end_hash"          => \&end_hash,
     "start_set"         => \&start_set,
     "sadd"              => \&sadd,
     "end_set"           => \&end_set,
     "start_list"        => \&start_list,
     "rpush"             => \&rpush,
     "end_list"          => \&end_list,
     "start_sorted_set"  => \&start_sorted_set,
     "zadd"              => \&zadd,
     "end_sorted_set"    => \&end_sorted_set,
     "end_database"      => \&end_database,
     "end_rdb"           => \&end_rdb,
 };
 $parser = new Redis::RdbParser($callbacks);

 $parser->parse($filename);
 #
 # or 
 #
 my $filter = {
     'dbs' => [0, 1],
     'keys' => ['^foo$', '^bar'],
     'types' => ["hash", "set"],
 };
 $parser->parse($filename, $filter);

DESCRIPTION

Redis::RdbParser is a parser for Redis' rdb dump files. The parser generates events similar to an xml sax parser.

callbacks

The dump file is parsed sequentially. As and when objects are discovered, appropriate callbacks would be invoked. You can set the callback item `undef` if you don't care it.

start_rdb
    sub start_rdb {
        my $filename = shift;
        # fill your code
    }

Called once we know we are dealing with a valid Redis dump file.

start_database
    sub start_database {
        my $db_number = shift;
        # fill your code
    }

Called to indicate the start of database `db_number`. Once a database starts, another database cannot start unless the first one completes and then `end_database` callback is called.

key
    sub key {
        my $key = shift;
        # fill your code
    }

Called to indicate a key readed in the parsing process.

set
    sub set {
        my ($key, $value, $expiry) = @_;
        # fill your code
    }

Callback to handle a key with a string value and an optional expiry.

start_hash
    sub start_hash {
        my ($key, $length, $expiry, $info) = @_;
        # fill your code
    }

Callback to handle the start of a hash.

After `start_hash`, the callback `hset` will be called with this `key` exactly `length` times.

After that, the `end_hash` callback will be called.

hset
    sub hset {
        my ($key, $field, $value) = @_;
        # fill your code
    }

Callback to insert a field=value pair in an existing hash.

end_hash
    sub end_hash {
        my $key = shift;
        # fill your code
    }

Called when there are no more elements in the hash.

start_set
    sub start_set {
        my ($key, $length, $expiry, $info) = @_;
        # fill your code
    }

Callback to handle the start of the set.

After `start_set`, the callback `sadd` will be called with `key` exactly `length` times.

After that, the callback `end_set` will be called to indicate the end of the set.

sadd
    sub sadd {
        my ($key, $member) = @_;
        # fill your code
    }

Callback to insert a new member to this set.

end_set
    sub end_set {
        my ($key) = @_;
        # fill your code
    }

Called when there are no more elements in this set.

start_list
    sub start_list {
        my ($key, $length, $expiry, $info) = @_;
        # fill your code
    }

Callback to handle the start of a list.

After `start_list`, the callback `rpush` will be called with `key` exactly `length` times.

After that, the `end_list` method will be called to indicate the end of the list.

rpush
    sub rpush {
        my ($key, $value) = @_;
        # fill your code
    }

Callback to insert a new value into this list.

end_list
    sub end_list {
        my ($key) = @_;
        # fill your code
    }

Called when there are no more elements in this list.

start_sorted_set
    sub start_sorted_set {
        my ($key, $length, $expiry) = @_;
        # fill your code
    }

Callback to handle the start of a sorted set.

After `start_sorted_set`, the callback `zadd' will called with `key` exactly `length` times.

Also, `zadd` will be called in a sorted order, so as to preserve the ordering of this sorted set.

After that, the callback `end_sorted_set` will be called to indicate the end of this sorted set.

zadd
    sub zadd {
        my ($key, $score, $member) = @_;
        # fill your code
    }

Callback to insert a new value into this sorted set.

end_sorted_set
    sub end_sorted_set {
        my ($key) = @_;
        # fill your code
    }

Called when there are no more elements in this sorted set.

end_database
    sub end_database {
        my $db_number = shift;
        # fill your code
    }

Called when the current database ends

After `end_database`, one of the callbacks are called:

1) `start_database` with a new database number

2) `end_rdb` to indicate we have reached the end of the file

end_rdb
    sub end_rdb {
        my $filename = shift;
        # fill your code
    }

Called to indicate we have completed parsing of the dump file.

filter

filter is a reference with the following keys:

        $filter = {
            "dbs"   => [0, 1],              # db number
            "keys"  => ['^foo$', '^bar'],   # keys regular expression
            "types" => ["string", "hash", "list", "set", "sorted set"],
        }

NOTE:

The filter will NOT affect `start_rdb`, `end_rdb`, `start_database`, `end_database`, and `key` callbacks.

If filter is undef, results will not be filtered.

The keys in filter is processed as regular expression.

If dbs, keys or types is undef, no filtering will be done on the axis.

REPOSITORY

https://github.com/flygoast/Redis-RdbParser

AUTHOR

FengGu, <flygoast@126.com>

COPYRIGHT AND LICENSE

Copyright (C) 2012 by FengGu

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.8 or, at your option, any later version of Perl 5 you may have available.