=head1 NAME
MojoX::Redis - asynchronous Redis client for L<Mojolicious>.
=head1 SYNOPSIS
use MojoX::Redis;
my $redis = MojoX::Redis->new(server => '127.0.0.1:6379');
# Execute some commands
$redis->ping(
sub {
my ($redis, $res) = @_;
if ($res) {
print "Got result: ", $res->[0], "\n";
}
else {
print "Error: ", $redis->error, "\n";
}
}
);
# Work with keys
$redis->set(key => 'value');
$redis->get(
key => sub {
my ($redis, $res) = @_;
print "Value of 'key' is $res->[0]\n";
}
);
# Cleanup connection
$redis->quit(sub { shift->stop });
# Start IOLoop (in case it is not started yet)
$redis->start;
Create new Mojo::IOLoop instance if you need to get blocked in a Mojolicious
application.
use Mojolicious::Lite;
use MojoX::Redis;
get '/' => sub {
my $self = shift;
my $redis = MojoX::Redis->new(ioloop => Mojo::IOLoop->new);
my $value;
$redis->set(foo => 'bar')->get(
foo => sub {
my ($redis, $result) = @_;
$redis->quit->stop;
return app->log->error($redis->error) unless $result;
$value = $result->[0];
}
)->start;
$self->render(text => qq(Foo value is "$value"));
};
app->start;
=head1 DESCRIPTION
L<MojoX::Redis> is an asynchronous client to Redis for Mojo.
=head1 ATTRIBUTES
L<MojoX::Redis> implements the following attributes.
=head2 C<server>
my $server = $redis->server;
$redis = $redis->server('127.0.0.1:6379');
C<Redis> server connection string, defaults to '127.0.0.1:6379'.
=head2 C<ioloop>
my $ioloop = $redis->ioloop;
$redis = $redis->ioloop(Mojo::IOLoop->new);
Loop object to use for io operations, by default a L<Mojo::IOLoop> singleton
object will be used.
=head2 C<timeout>
my $timeout = $redis->timeout;
$redis = $redis->timeout(100);
Maximum amount of time in seconds a connection can be inactive before being
dropped, defaults to C<300>.
=head2 C<encoding>
my $encoding = $redis->encoding;
$redis = $redis->encoding('UTF-8');
Encoding used for stored data, defaults to C<UTF-8>.
=head2 C<protocol_redis>
use Protocol::Redis::XS;
$redis->protocol_redis("Protocol::Redis::XS");
L<Protocol::Redis> implementation' constructor for parsing. By default
L<Protocol::Redis> will be used. Parser library must support
L<APIv1|Protocol::Redis/APIv1>.
Using L<Protocol::Redis::XS> instead of default choice can speedup parsing.
=head1 METHODS
L<MojoX::Redis> supports Redis' methods.
$redis->set(key => 'value);
$redis->get(key => sub { ... });
For more details take a look at C<execute> method.
Also L<MojoX::Redis> implements the following ones.
=head2 C<connect>
$redis = $redis->connect;
Connect to C<Redis> server.
=head2 C<execute>
$redis = $redis->execute("ping" => sub{
my ($redis, $result) = @_;
# Process result
});
$redis->execute(lrange => ["test", 0, -1] => sub {...});
$redis->execute(set => [test => "test_ok"]);
Execute specified command on C<Redis> server. If error occured during
request $result will be set to undef, error string can be obtained with
$redis->error.
=head2 C<error>
$redis->execute("ping" => sub {
my ($redis, $result) = @_;
die $redis->error unless defined $result;
});
Returns error occured during command execution.
Note that this method returns error code just from current command and
can be used just in callback.
=head2 C<on_error>
$redis->on_error(sub{
my $redis = shift;
warn 'Redis error ', $redis->error, "\n";
});
Executes if error occured. Called before commands callbacks.
=head2 C<start>
$redis->start;
Starts IOLoop. Shortcut for $redis->ioloop->start;
=head1 SEE ALSO
L<Protocol::Redis>, L<Mojolicious>, L<Mojo::IOLoop>
=head1 SUPPORT
=head2 IRC
#ru.pm on irc.perl.org
=head1 DEVELOPMENT
=head2 Repository
https://github.com/und3f/mojox-redis
=head1 AUTHOR
Sergey Zasenko, C<
[email protected]>.
=head1 COPYRIGHT AND LICENSE
Copyright (C) 2010-2011, Sergey Zasenko
This program is free software, you can redistribute it and/or modify it under
the terms of the Artistic License version 2.0.