NAME
AnyEvent::Redis::RipeRedis - Non-blocking Redis client with reconnection feature
SYNOPSIS
use AnyEvent;
use AnyEvent::Redis::RipeRedis qw( :err_codes );
my $cv = AnyEvent->condvar();
my $redis = AnyEvent::Redis::RipeRedis->new(
host => 'localhost',
port => '6379',
password => 'your_password',
encoding => 'utf8',
on_connect => sub {
print "Connected to Redis server\n";
},
on_disconnect => sub {
print "Disconnected from Redis server\n";
},
on_error => sub {
my $err_msg = shift;
my $err_code = shift;
warn "$err_msg. Error code: $err_code\n";
},
);
# Set value
$redis->set( 'bar', 'Some string', {
on_done => sub {
my $data = shift;
print "$data\n";
},
on_error => sub {
my $err_msg = shift;
my $err_code = shift;
warn "$err_msg. Error code: $err_code\n";
if ( $err_code == E_LOADING_DATASET ) {
# Do something special
}
}
} );
$cv->recv();
$redis->disconnect();
DESCRIPTION
AnyEvent::Redis::RipeRedis is a non-blocking Redis client with with reconnection feature. It supports subscriptions, transactions, has simple API and it faster than AnyEvent::Redis.
Requires Redis 1.2 or higher and any supported event loop.
CONSTRUCTOR
my $redis = AnyEvent::Redis::RipeRedis->new(
host => 'localhost',
port => '6379',
password => 'your_password',
connection_timeout => 5,
reconnect => 1,
encoding => 'utf8',
on_connect => sub {
print "Connected to Redis server\n";
},
on_disconnect => sub {
print "Disconnected from Redis server\n";
},
on_connect_error => sub {
my $err_msg = shift;
warn "$err_msg\n";
},
on_error => sub {
my $err_msg = shift;
my $err_code = shift;
warn "$err_msg. Error code: $err_code\n";
},
);
Constructor parameters
- host
-
Server hostname (default: 127.0.0.1)
- port
-
Server port (default: 6379)
- password
-
Authentication password. If it specified,
AUTH
command will be executed automaticaly. - connection_timeout
-
Connection timeout. If after this timeout client could not connect to the server, callback
on_error
is called. - reconnect
-
If this parameter is TRUE (TRUE by default), client in case of lost connection will attempt to reconnect to server, when executing next command. Client will attempt to reconnect only once and if it fails, calls
on_error
callback. If you need several attempts of reconnection, just retry command fromon_error
callback as many times, as you need. This feature made client more responsive. - encoding
-
Used to decode and encode strings during read and write operations.
- on_connect => $cb->()
-
Callback
on_connect
is called, when connection is established. - on_disconnect => $cb->()
-
Callback
on_disconnect
is called, when connection is closed. - on_connect_error => $cb->( $err_msg )
-
Callback
on_connect_error
is called, when the connection could not be established. If this collback isn't specified, thenon_error
callback is called. - on_error => $cb->( $err_msg, $err_code )
-
Callback
on_error
is called, when any error occurred.
COMMAND EXECUTION
<command>( [ @args[, \%params ] ] )
# Increment
$redis->incr( 'foo', {
on_done => sub {
my $data = shift;
print "$data\n";
},
} );
# Set value
$redis->set( 'bar', 'Some string' );
# Get list of values
$redis->lrange( 'list', 0, -1, {
on_done => sub {
my $data = shift;
foreach my $val ( @{ $data } ) {
print "$val\n";
}
},
on_error => sub {
my $err_msg = shift;
my $err_code = shift;
warn "$err_msg. Error code: $err_code\n";
},
} );
Full list of Redis commands can be found here: http://redis.io/commands
- on_done => $cb->( $data )
-
Callback
on_done
is called, when command handling is done. - on_error => $cb->( $err_msg, $err_code )
-
Callback
on_error
is called, when any error occurred.
SUBSCRIPTIONS
subscribe( @channels[, \%params ] )
Subscribe to channels by name:
$redis->subscribe( qw( ch_foo ch_bar ), {
on_done => sub {
my $ch_name = shift;
my $subs_num = shift;
print "Subscribed: $ch_name. Active: $subs_num\n";
},
on_message => sub {
my $ch_name = shift;
my $msg = shift;
print "$ch_name: $msg\n";
},
} );
- on_done => $cb->( $ch_name, $sub_num )
-
Callback
on_done
is called, when subscription is done. - on_message => $cb->( $ch_name, $msg )
-
Callback
on_message
is called, when published message is received. - on_error => $cb->( $err_msg, $err_code )
-
Callback
on_error
is called, when any error occurred.
psubscribe( @patterns[, \%params ] )
Subscribe to group of channels by pattern:
$redis->psubscribe( qw( info_* err_* ), {
on_done => sub {
my $ch_pattern = shift;
my $subs_num = shift;
print "Subscribed: $ch_pattern. Active: $subs_num\n";
},
on_message => sub {
my $ch_name = shift;
my $msg = shift;
my $ch_pattern = shift;
print "$ch_name ($ch_pattern): $msg\n";
},
on_error => sub {
my $err_msg = shift;
warn "$err_msg\n";
},
} );
- on_done => $cb->( $ch_pattern, $sub_num )
-
Callback
on_done
is called, when subscription is done. - on_message => $cb->( $ch_name, $msg, $ch_pattern )
-
Callback
on_message
is called, when published message is received. - on_error => $cb->( $err_msg, $err_code )
-
Callback
on_error
is called, when any error occurred.
unsubscribe( @channels[, \%params ] )
Unsubscribe from channels by name:
$redis->unsubscribe( qw( ch_foo ch_bar ), {
on_done => sub {
my $ch_name = shift;
my $subs_num = shift;
print "Unsubscribed: $ch_name. Active: $subs_num\n";
},
on_error => sub {
my $err_msg = shift;
warn "$err_msg\n";
},
} );
- on_done => $cb->( $ch_name, $sub_num )
-
Callback
on_done
is called, when unsubscription is done. - on_error => $cb->( $err_msg, $err_code )
-
Callback
on_error
is called, when any error occurred.
punsubscribe( @patterns[, \%params ] )
Unsubscribe from group of channels by pattern:
$redis->punsubscribe( qw( info_* err_* ), {
on_done => sub {
my $ch_pattern = shift;
my $subs_num = shift;
print "Unsubscribed: $ch_pattern. Active: $subs_num\n";
},
on_error => sub {
my $err_msg = shift;
warn "$err_msg\n";
},
} );
- on_done => $cb->( $ch_pattern, $sub_num )
-
Callback
on_done
is called, when unsubscription is done. - on_error => $cb->( $err_msg, $err_code )
-
Callback
on_error
is called, when any error occurred.
CONNECTION VIA UNIX-SOCKET
Redis 2.2 and higher support connection via UNIX domain socket. To connect via a UNIX-socket in the parameter host
you have to specify unix/
, and in the parameter port
you have to specify the path to the socket.
my $redis = AnyEvent::Redis::RipeRedis->new(
host => 'unix/',
port => '/tmp/redis.sock',
);
ERROR CODES
Error codes were introduced in version of module 1.100. They can be used for programmatic handling of errors.
1 - E_CANT_CONN
2 - E_LOADING_DATASET
3 - E_IO_OPERATION
4 - E_CONN_CLOSED_BY_REMOTE_HOST
5 - E_CONN_CLOSED_ON_DEMAND
6 - E_NO_CONN
7 - E_INVALID_PASS
8 - E_AUTH_REQUIRED
9 - E_COMMAND_EXEC
10 - E_UNEXPECTED
- E_CANT_CONN
-
Can't connect to server.
- E_LOADING_DATASET
-
Redis is loading the dataset in memory.
- E_IO_OPERATION
-
I/O operation error.
- E_CONN_CLOSED_BY_REMOTE_HOST
-
Connection closed by remote host.
- E_CONN_CLOSED_ON_DEMAND
-
Connection closed on demand.
- E_NO_CONN
-
No connection to the server.
- E_INVALID_PASS
-
Invalid password
- E_AUTH_REQUIRED
-
Operation not permitted. Authentication required.
- E_COMMAND_EXEC
-
Command execution error.
- E_UNEXPECTED
-
Unexpected error.
To use constants of error codes you have to import them.
use AnyEvent::Redis::RipeRedis qw( :err_codes );
DISCONNECTION
When the connection to the server is no longer needed you can close it in three ways: send QUIT
command, call method disconnect()
, or you can just "forget" any references to an AnyEvent::Redis::RipeRedis object, but in this case client don't calls on_disconnect
callback.
$redis->quit(
on_done => sub {
# Do something
}
} );
$redis->disconnect();
undef( $redis );
SEE ALSO
AnyEvent, AnyEvent::Redis, Redis
AUTHOR
Eugene Ponizovsky, <ponizovsky@gmail.com>
Special thanks
Alexey Shrub
Vadim Vlasov
Konstantin Uvarin
COPYRIGHT AND LICENSE
Copyright (c) 2012, Eugene Ponizovsky, <ponizovsky@gmail.com>. All rights reserved.
This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself.