NAME
Redis::Parser::XS - unified redis protocol parser
SYNOPSIS
use Redis::Parser::XS;
my @output;
my $buf = "+OK" .
"\x0d\x0a";
my $len = parse_redis $buf, \@output;
if (!defined $len) {
warn "incorrect protocol message\n";
} elsif ($len == 0) {
warn "not enough data to parse, " .
"read some more and try again\n";
if (length ($buf) > 16384) { # 16k and still incomplete ?
# better to just bail
...
}
} else { # $len > 0
warn "parsed $len bytes\n";
# got status reply:
# @output = ( [ '+', 'OK' ] )
$buf = substr $buf, $len;
}
DESCRIPTION
Easy way to parse unified redis protocol.
Protocol specification http://redis.io/topics/protocol
FUNCTIONS
- $len = parse_redis $buf, \@output;
-
Parses redis protocol messages from
$buf
and pushes each message into@output
. Returnsundef
on error or total length of parsed data. Return value of0
returned as a "0 but true" string and indicates, that there isn't enough data to parse even one message.Parsed messages added to the
@output
in the following format:@output = ( ['+', 'OK' ], # +OK CRLF # ['-', 'ERROR' ], # -ERROR CRLF # [':', '123' ], # :123 CRLF # ['$', 'foo' ], # $3 CRLF # foo CRLF # ['$', undef ], # $-1 CRLF # ['$', '' ], # $0 CRLF # CRLF # ['*', [] ], # *0 CRLF # ['*', undef ], # *-1 CRLF # ['*', [ 'foo', # *2 CRLF ['+', 'OK'], # $3 CRLF ... ] # foo CRLF # +OK CRLF # ... # ['*', ['foo', undef ] ], # *2 CRLF # $3 CRLF # foo CRLF # $-1 CRLF )
EXPORT
Exports only one function:
parse_redis
BENCHMARK
Here is a sample benchmark against Protocol::Redis::XS, generated by eg/bench.pl:
Status reply
Rate
Protocol::Redis::XS 281098/s
Redis::Parser::XS 367589/s
Multibulk reply
Rate
Protocol::Redis::XS 127999/s
Redis::Parser::XS 270490/s
SEE ALSO
AUTHOR
Alexandr Gomoliako <zzz@zzz.org.ua>
LICENSE
Copyright 2011 Alexandr Gomoliako. All rights reserved.
This module is free software. It may be used, redistributed and/or modified under the same terms as Perl itself.