Mojo::Redis - Asynchronous Redis client for Mojolicious.
use Mojo::Redis; my $redis = Mojo::Redis->new(server => '127.0.0.1:6379'); # Execute some commands $redis->ping( sub { my ($redis, $res) = @_; if (defined $res) { print "Got result: ", $res, "\n"; } } ); # Work with keys # Ommitting the callback still makes it non-blocking and "error" events # will be called if something terrible goes wrong. $redis->set(key => 'value'); $redis->get( key => sub { my ($redis, $res) = @_; print "Value of 'key' is $res\n"; } ); # Cleanup connection $redis->quit(sub { shift->ioloop->stop }); # Start IOLoop (in case it is not started yet) $redis->ioloop->start;
Create new Mojo::IOLoop instance if you need to get blocked in a Mojolicious application.
use Mojolicious::Lite; use Mojo::Redis; get '/user' => sub { my $self = shift->render_later; my $uid = $self->session('uid'); my $redis = Mojo::Redis->new; Mojo::IOLoop->delay( sub { my ($delay) = @_; $redis->hgetall("user:$uid", $delay->begin); }, sub { my ($delay, $user) = @_; $self->render(json=>$user); }, ); }; websocket '/messages' => sub { my $self = shift; my $tx = $self->tx; my $pub = Mojo::Redis->new; my $sub = $pub->subscribe('messages'); # message from redis $sub->on(message => sub { my ($sub, $message, $channel) = @_; # $channel == messages $tx->send($message); }); # message from websocket $self->on(message => sub { my ($self, $message) = @_; $pub->publish(messages => $message); }); # need to clean up after websocket close $self->on(finish => sub { undef $pub; undef $sub; undef $tx; }); }; app->start;
Mojo::Redis is an asynchronous client to Redis for Mojo.
$redis->on(error => sub{ my($redis, $error) = @_; warn "[REDIS ERROR] $error\n"; });
Emitted if error occurred. Called before commands callbacks.
$redis->on(close => sub{ my($redis) = @_; warn "[REDIS DISCONNECT]\n"; });
Emitted when the connection to the server gets closed.
Mojo::Redis implements the following attributes.
my $server = $redis->server; $redis = $redis->server('127.0.0.1:6379'); $redis = $redis->server('redis://anything:PASSWORD@127.0.0.1:6379/DB_INDEX');
Redis server connection string, defaults to '127.0.0.1:6379'. The latter can be used if you want Mojo::Redis to automatically run "auth" with PASSWORD and/or "select" with DB_INDEX on connect. Both AUTH and DB_INDEX are optional.
Redis
PASSWORD
DB_INDEX
my $ioloop = $redis->ioloop; $redis = $redis->ioloop(Mojo::IOLoop->new);
Loop object to use for io operations, by default a Mojo::IOLoop singleton object will be used.
my $timeout = $redis->timeout; $redis = $redis->timeout(100);
Maximum amount of time in seconds a connection can be inactive before being dropped, defaults to 0 - meaning no timeout.
0
my $encoding = $redis->encoding; $redis = $redis->encoding('UTF-8');
Encoding used for stored data, defaults to UTF-8.
UTF-8
use Protocol::Redis::XS; $redis->protocol_redis("Protocol::Redis::XS");
Protocol::Redis implementation' constructor for parsing. By default Protocol::Redis will be used. Parser library must support APIv1.
Using Protocol::Redis::XS instead of default choice can speedup parsing.
Mojo::Redis supports Redis' methods.
$redis->set(key => 'value); $redis->get(key => sub { ... });
For more details take a look at execute method.
execute
Also Mojo::Redis implements the following ones.
$redis = $redis->connect;
Connect to Redis server.
$redis = $redis->execute("ping" => sub { my ($redis, $result) = @_; # Process result }); $redis->execute(lrange => "test", 0, -1 => sub {...}); $redis->execute(set => test => "test_ok"); $redis->execute( [lrange => "test", 0, -1], [get => "test"], [hmset => foo => { one => 1, two => 2 }], sub { my($redis, $lrange, $get, $hmset) = @_; # ... }, );
Execute specified command on Redis server. If error occurred during request $result will be set to undef, error string can be obtained with the "error" event.
See "server" instead.
Subscribes to channels matching the given patterns.
# Subscribes to foo, foobar, foo.whaz, etc. my $psub = $redis->psubscribe('foo*'); $psub->on(message => sub { my ($self, $msg, $channel, $pattern) = @_; # 'hi!', 'foo.roo', 'foo*' }); $redis->publish('foo.roo' => 'hi!');
psubscribe has the same interface options and capabilities as "subscribe".
It's possible to subscribe in two ways:
$self = $redis->subscribe('foo','bar' => sub { my ($redis, $data) = @_; });
The above code will overtake the current connection (if any) and put this object into a pure subscribe mode.
my $sub = $redis->subscribe('foo','bar'); $sub->on(data => sub { my ($sub, $data) = @_; });
Opens up a new connection that subscribes to the given pubsub channels. Returns an instance of Mojo::Redis::Subscription. The existing $redis object can still be used to "get" data as expected.
$redis
Protocol::Redis, Mojolicious, Mojo::IOLoop
You can contact the developers "marcus" and "batman" on IRC: irc://irc.perl.org:6667/#mojo (#mojo on irc.perl.org)
Sergey Zasenko, undef@cpan.org.
undef@cpan.org
Forked from MojoX::Redis and updated to new IOLoop API by Marcus Ramberg mramberg@cpan.org and Jan Henning Thorsen jhthorsen@cpan.org.
mramberg@cpan.org
jhthorsen@cpan.org
Copyright (C) 2010-2011, Sergey Zasenko (C) 2012, Marcus Ramberg
This program is free software, you can redistribute it and/or modify it under the terms of the Artistic License version 2.0.
To install Mojo::Redis, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Mojo::Redis
CPAN shell
perl -MCPAN -e shell install Mojo::Redis
For more information on module installation, please visit the detailed CPAN module installation guide.