AnyEvent-Redis
view release on metacpan or search on metacpan
lib/AnyEvent/Redis.pm view on Meta::CPAN
my ($res, $err) = @_;
$self->_expect($cv);
if ($command eq 'info') {
$res = { map { split /:/, $_, 2 } grep !/^#/, split /\r\n/, $res };
} elsif ($command eq 'keys' && !ref $res) {
# Older versions of Redis (1.2) need this
$res = [split / /, $res];
}
eval { $err ? $cv->croak($res) : $cv->send($res) };
warn "Exception in callback (ignored): $@" if $@;
$self->all_cv->end;
$cmd_cv->send;
});
$self->{multi_write} = 1 if $command eq 'multi';
}
return $cv;
};
my $queue = delete $self->{connect_queue} || [];
for my $command (@$queue) {
my($cv, @args) = @$command;
$self->{cmd_cb}->(@args, $cv);
}
};
return $cv;
}
sub _expect {
my ($self, $cv) = @_;
my $p = shift @{$self->{pending_cvs} || []};
$p && $p == $cv or confess "BUG: mismatched CVs";
}
1;
__END__
=encoding utf-8
=for stopwords
=head1 NAME
AnyEvent::Redis - Non-blocking Redis client
=head1 SYNOPSIS
use AnyEvent::Redis;
my $redis = AnyEvent::Redis->new(
host => '127.0.0.1',
port => 6379,
encoding => 'utf8',
on_error => sub { warn @_ },
on_cleanup => sub { warn "Connection closed: @_" },
);
# callback based
$redis->set( 'foo'=> 'bar', sub { warn "SET!" } );
$redis->get( 'foo', sub { my $value = shift } );
my ($key, $value) = ('list_key', 123);
$redis->lpush( $key, $value );
$redis->lpop( $key, sub { my $value = shift });
# condvar based
my $cv = $redis->lpop( $key );
$cv->cb(sub { my $value = $_[0]->recv });
=head1 DESCRIPTION
AnyEvent::Redis is a non-blocking (event-driven) Redis client.
This module is an AnyEvent user; you must install and use a supported event loop.
=head1 ESTABLISHING A CONNECTION
To create a new connection, use the new() method with the following attributes:
=over
=item host => <HOSTNAME>
B<Required.> The hostname or literal address of the server.
=item port => <PORT>
Optional. The server port.
=item encoding => <ENCODING>
Optional. Encode and decode data (when storing and retrieving, respectively)
according to I<ENCODING> (C<"utf8"> is recommended or see L<Encode::Supported>
for details on possible I<ENCODING> values).
Omit if you intend to handle raw binary data with this connection.
=item on_error => $cb->($errmsg)
Optional. Callback that will be fired if a connection or database-level error
occurs. The error message will be passed to the callback as the sole argument.
=item on_cleanup => $cb->($errmsg)
Optional. Callback that will be fired if a connection error occurs. The
error message will be passed to the callback as the sole argument. After
this callback, errors will be reported for all outstanding requests.
=back
=head1 METHODS
All methods supported by your version of Redis should be supported.
=head2 Normal commands
There are two alternative approaches for handling results from commands:
=over 4
=item * L<AnyEvent::CondVar> based:
my $cv = $redis->command(
# arguments to command
);
# Then...
my $res;
eval {
# Could die()
$res = $cv->recv;
};
warn $@ if $@;
# or...
$cv->cb(sub {
my ($cv) = @_;
my ($result, $err) = $cv->recv
});
=item * Callback:
$redis->command(
# arguments,
sub {
my ($result, $err) = @_;
});
(Callback is a wrapper around the C<$cv> approach.)
=back
( run in 0.402 second using v1.01-cache-2.11-cpan-56fb94df46f )