EV-Redis
view release on metacpan or search on metacpan
[AnyEvent](https://metacpan.org/pod/AnyEvent) has a support for EV as its one of backends, so [EV::Redis](https://metacpan.org/pod/EV%3A%3ARedis) can be used in your AnyEvent applications seamlessly.
# NO UTF-8 SUPPORT
Unlike other redis modules, this module doesn't support utf-8 string.
This module handle all variables as bytes. You should encode your utf-8 string before passing commands like following:
use Encode;
# set $val
$redis->set(foo => encode_utf8 $val, sub { ... });
# get $val
$redis->get(foo, sub {
my $val = decode_utf8 $_[0];
});
# METHODS
## new(%options);
Create new [EV::Redis](https://metacpan.org/pod/EV%3A%3ARedis) instance.
Available `%options` are:
- host => 'Str'
- port => 'Int'
Hostname and port number of redis-server to connect. Mutually exclusive with `path`.
- path => 'Str'
UNIX socket path to connect. Mutually exclusive with `host`.
- on\_error => $cb->($errstr)
Error callback will be called when a connection level error occurs.
If not provided (or `undef`), a default handler that calls `die` is
installed. To have no error handler, call `$obj->on_error(undef)`
after construction.
This callback can be set by `$obj->on_error($cb)` method any time.
- on\_connect => $cb->()
Connection callback will be called when connection successful and completed to redis server.
This callback can be set by `$obj->on_connect($cb)` method any time.
- on\_disconnect => $cb->()
Disconnect callback will be called when disconnection occurs (both normal and error cases).
This callback can be set by `$obj->on_disconnect($cb)` method any time.
- on\_push => $cb->($reply)
RESP3 push callback for server-initiated out-of-band messages (Redis 6.0+).
Called with the decoded push message (an array reference). This enables
client-side caching invalidation and other server-push features.
This callback can be set by `$obj->on_push($cb)` method any time.
- connect\_timeout => $num\_of\_milliseconds
Connection timeout.
- command\_timeout => $num\_of\_milliseconds
Command timeout.
- max\_pending => $num
Maximum number of commands sent to Redis concurrently. When this limit is reached,
additional commands are queued locally and sent as responses arrive.
0 means unlimited (default). Use `waiting_count` to check the local queue size.
- waiting\_timeout => $num\_of\_milliseconds
Maximum time a command can wait in the local queue before being cancelled with
"waiting timeout" error. 0 means unlimited (default).
- resume\_waiting\_on\_reconnect => $bool
Controls behavior of waiting queue on disconnect. If false (default), waiting
commands are cancelled with error on disconnect. If true, waiting commands are
preserved and resumed after successful reconnection.
- reconnect => $bool
Enable automatic reconnection on connection failure or unexpected disconnection.
Default is disabled (0).
- reconnect\_delay => $num\_of\_milliseconds
Delay between reconnection attempts. Default is 1000 (1 second).
- max\_reconnect\_attempts => $num
Maximum number of reconnection attempts. 0 means unlimited. Default is 0.
Negative values are treated as 0 (unlimited).
- priority => $num
Priority for the underlying libev IO watchers. Higher priority watchers are
invoked before lower priority ones. Valid range is -2 (lowest) to +2 (highest),
with 0 being the default. See [EV](https://metacpan.org/pod/EV) documentation for details on priorities.
- keepalive => $seconds
Enable TCP keepalive with the specified interval in seconds. When enabled,
the OS will periodically send probes on idle connections to detect dead peers.
0 means disabled (default). Recommended for long-lived connections behind
NAT gateways or firewalls.
- prefer\_ipv4 => $bool
Prefer IPv4 addresses when resolving hostnames. Mutually exclusive with
`prefer_ipv6`.
Disconnect from redis-server. Safe to call when already disconnected.
Stops any pending reconnect timer, so explicit disconnect prevents automatic
reconnection. Triggers the `on_disconnect` callback when disconnecting
from an active connection. When called while already disconnected, clears
any waiting commands (e.g., preserved by `resume_waiting_on_reconnect`),
invoking their callbacks with a "disconnected" error (`on_disconnect`
does not fire in this case).
This method is usable for exiting event loop.
## is\_connected
Returns true (1) if a connection context is active (including while the
connection is being established), false (0) otherwise.
## has\_ssl
Class method. Returns true (1) if the module was built with TLS support,
false (0) otherwise.
if (EV::Redis->has_ssl) {
# TLS connections are available
}
## connect\_timeout(\[$ms\])
Get or set the connection timeout in milliseconds. Returns the current value,
or undef if not set. Can also be set via constructor.
## command\_timeout(\[$ms\])
Get or set the command timeout in milliseconds. Returns the current value,
or undef if not set. Can also be set via constructor. When changed while
connected, takes effect immediately on the active connection.
## on\_error(\[$cb->($errstr)\])
Set error callback. With a CODE reference argument, replaces the handler
and returns the new handler. With `undef` or without arguments, clears
the handler and returns undef.
**Note:** Calling without arguments clears the handler. There is no way to
read the current handler without clearing it. This applies to all handler
methods (`on_error`, `on_connect`, `on_disconnect`, `on_push`).
## on\_connect(\[$cb->()\])
Set connect callback. With a CODE reference argument, replaces the handler
and returns the new handler. With `undef` or without arguments, clears
the handler and returns undef.
## on\_disconnect(\[$cb->()\])
Set disconnect callback, called on both normal and error disconnections.
With a CODE reference argument, replaces the handler and returns the new
handler. With `undef` or without arguments, clears the handler and
returns undef.
## on\_push(\[$cb->($reply)\])
Set RESP3 push callback for server-initiated messages (Redis 6.0+).
The callback receives the decoded push message as an array reference.
With a CODE reference argument, replaces the handler and returns the new
handler. With `undef` or without arguments, clears the handler and
returns undef. When changed while connected, takes effect immediately.
$redis->on_push(sub {
my ($msg) = @_;
# $msg is an array ref, e.g. ['invalidate', ['key1', 'key2']]
});
## reconnect($enable, $delay\_ms, $max\_attempts)
Configure automatic reconnection.
$redis->reconnect(1); # enable with defaults (1s delay, unlimited)
$redis->reconnect(1, 0); # enable with immediate reconnect
$redis->reconnect(1, 2000); # enable with 2 second delay
$redis->reconnect(1, 1000, 5); # enable with 1s delay, max 5 attempts
$redis->reconnect(0); # disable
`$delay_ms` defaults to 1000 (1 second). 0 means immediate reconnect.
`$max_attempts` defaults to 0 (unlimited).
When enabled, the client will automatically attempt to reconnect on connection
failure or unexpected disconnection. Intentional `disconnect()` calls will
not trigger reconnection.
## reconnect\_enabled
Returns true (1) if automatic reconnection is enabled, false (0) otherwise.
## pending\_count
Returns the number of commands sent to Redis awaiting responses.
Persistent commands (subscribe, psubscribe, ssubscribe, monitor) are not
included in this count.
When called from inside a command callback, the count includes the
current command (it is decremented after the callback returns).
## waiting\_count
Returns the number of commands queued locally (not yet sent to Redis).
These are commands that exceeded the `max_pending` limit.
## max\_pending($limit)
Get or set the maximum number of concurrent commands sent to Redis.
Persistent commands (subscribe, psubscribe, ssubscribe, monitor) are not
subject to this limit.
0 means unlimited (default). When the limit is reached, additional commands
are queued locally and sent as responses arrive.
## waiting\_timeout($ms)
Get or set the maximum time in milliseconds a command can wait in the local queue.
Commands exceeding this timeout are cancelled with "waiting timeout" error.
0 means unlimited (default). Returns the current value as an integer (0 when unset).
## resume\_waiting\_on\_reconnect($bool)
Get or set whether waiting commands are preserved on disconnect and resumed
( run in 0.750 second using v1.01-cache-2.11-cpan-7fcb06a456a )