=head1 NAME
Net::Async::Redis::Cluster - support
for
cluster routing
=head1 SYNOPSIS
my
$loop
= IO::Async::Loop->new;
$loop
->add(
my
$cluster
= Net::Async::Redis::Cluster->new(
)
);
await
$cluster
->bootstrap(
host
=>
'redis.local'
,
);
print
"Key: "
. await
$cluster
->get(
'some_key'
);
=head1 DESCRIPTION
Provides access to a Redis cluster.
Usage is similar to L<Net::Async::Redis>
with
the addition of a L</bootstrap>
step to find the initial client nodes:
$loop
->add(
my
$cluster
= Net::Async::Redis::Cluster->new(
)
);
await
$cluster
->bootstrap(
host
=>
'redis.local'
,
);
print
"Key: "
. await
$cluster
->get(
'some_key'
);
Note that this adds some overhead to lookups, so you may be better served
See L</configure>
for
additional cluster configuration parameters.
=head1 METHODS
=head2 bootstrap
Connects to a Redis server and attempts to discover the cluster node configuration.
Usage:
try
{
await
$cluster
->bootstrap(
host
=>
'redis-primary.local'
,
port
=> 6379,
);
}
catch
{
$log
->errorf(
'Unable to bootstrap the Redis cluster: %s'
, $@);
}
=head2 clientside_cache_events
Provides combined stream of clientside-cache events from all known Redis primary nodes.
=head2 watch_keyspace
L<Net::Async::Redis/watch_keyspace> support
for
gathering notifications
from all known nodes.
=head2 client_setname
Apply client name to all nodes.
Note that this only updates the current nodes, it will not
apply to new nodes. Use the L<Net::Async::Redis/client_name>
constructor/L</configure> parameter to apply to all nodes.
=head2 multi
A C<MULTI> transaction on a Redis cluster works slightly differently from
single-node setups.
=over 4
=item * issue C<MULTI> on all nodes
=item * execute the commands, distributing across nodes as usual
=item * issue C<EXEC> or C<DISCARD> as appropriate
=back
Note that the coderef is called only once, even
if
there are multiple nodes involved.
Currently, there's
no
optimisation
for
limiting C<MULTI> to the nodes
participating in the transaction.
=head1 METHODS - All nodes
These methods operate on all nodes at once, and
return
the data in hashref mapping node ID to the response.
=head1 METHODS - Any node
These methods operate pick a random node to operate on,
returning the data as
if
this was a regular L<Net::Async::Redis>
instance.
=head1 METHODS - Internal
=head2 configure
Takes the same parameters as L<Net::Async::Redis/configure>,
with
the addition of:
=over 4
=item * C<use_read_replica> - direct
read
commands to replicas, instead of the primary nodes
=back
=head2 hash_slot_for_key
Calculates the CRC16 hash slot
for
the
given
key.
Note that
keys
are expected as bytestrings,
if
you have a Unicode string
you'd likely want to convert to UTF-8 first.
=head2 replace_nodes
Swap the existing node configuration out
for
a new arrayref of nodes.
=head2 node_list
Returns a list of the currently-configured nodes.
=head2 node_for_slot
Returns the appropriate L<Net::Async::Redis::Cluster::Node|node>
for
the
given
hash key (slot).
=head2 register_moved_slot
When we get MOVED error we will
use
this
sub
to rebuild the slot cache
=head2 apply_slots_from_instance
Connect to a random instance in the cluster
and execute CLUSTER SLOTS to get information
about the slots and their distribution.
=head2 execute_command
Lookup the correct node
for
the key then execute the command on that node,
if
there is a mismatch between
our
slot hashes and Redis's hashes
we will attempt to rebuild the slot hashes and
try
again
=head2 ryu
A L<Ryu::Async> instance
for
source/sink creation.
=head1 INHERITED METHODS
=over 4
=item L<Net::Async::Redis::Commands>
L<acl|Net::Async::Redis::Commands/acl>, L<acl_cat|Net::Async::Redis::Commands/acl_cat>, L<acl_deluser|Net::Async::Redis::Commands/acl_deluser>, L<acl_dryrun|Net::Async::Redis::Commands/acl_dryrun>, L<acl_genpass|Net::Async::Redis::Commands/acl_genpass>, L<acl_getuser|Net::Async::Redis::Commands/acl_getuser>, L<acl_help|Net::Async::Redis::Commands/acl_help>, L<acl_list|Net::Async::Redis::Commands/acl_list>, L<acl_load|Net::Async::Redis::Commands/acl_load>, L<acl_log|Net::Async::Redis::Commands/acl_log>, L<acl_save|Net::Async::Redis::Commands/acl_save>, L<acl_setuser|Net::Async::Redis::Commands/acl_setuser>, L<acl_users|Net::Async::Redis::Commands/acl_users>, L<acl_whoami|Net::Async::Redis::Commands/acl_whoami>, L<append|Net::Async::Redis::Commands/append>, L<asking|Net::Async::Redis::Commands/asking>, L<auth|Net::Async::Redis::Commands/auth>, L<bitcount|Net::Async::Redis::Commands/bitcount>, L<bitfield|Net::Async::Redis::Commands/bitfield>, L<bitfield_ro|Net::Async::Redis::Commands/bitfield_ro>, L<bitop|Net::Async::Redis::Commands/bitop>, L<bitpos|Net::Async::Redis::Commands/bitpos>, L<blmove|Net::Async::Redis::Commands/blmove>, L<blmpop|Net::Async::Redis::Commands/blmpop>, L<blpop|Net::Async::Redis::Commands/blpop>, L<brpop|Net::Async::Redis::Commands/brpop>, L<brpoplpush|Net::Async::Redis::Commands/brpoplpush>, L<bzmpop|Net::Async::Redis::Commands/bzmpop>, L<bzpopmax|Net::Async::Redis::Commands/bzpopmax>, L<bzpopmin|Net::Async::Redis::Commands/bzpopmin>, L<client|Net::Async::Redis::Commands/client>, L<client_caching|Net::Async::Redis::Commands/client_caching>, L<client_getname|Net::Async::Redis::Commands/client_getname>, L<client_getredir|Net::Async::Redis::Commands/client_getredir>, L<client_help|Net::Async::Redis::Commands/client_help>, L<client_id|Net::Async::Redis::Commands/client_id>, L<client_info|Net::Async::Redis::Commands/client_info>, L<client_kill|Net::Async::Redis::Commands/client_kill>, L<client_list|Net::Async::Redis::Commands/client_list>, L<client_no|Net::Async::Redis::Commands/client_no>, L<client_no_evict|Net::Async::Redis::Commands/client_no_evict>, L<client_no_touch|Net::Async::Redis::Commands/client_no_touch>, L<client_pause|Net::Async::Redis::Commands/client_pause>, L<client_reply|Net::Async::Redis::Commands/client_reply>, L<client_setinfo|Net::Async::Redis::Commands/client_setinfo>, L<client_tracking|Net::Async::Redis::Commands/client_tracking>, L<client_trackinginfo|Net::Async::Redis::Commands/client_trackinginfo>, L<client_unblock|Net::Async::Redis::Commands/client_unblock>, L<client_unpause|Net::Async::Redis::Commands/client_unpause>, L<cluster|Net::Async::Redis::Commands/cluster>, L<cluster_addslots|Net::Async::Redis::Commands/cluster_addslots>, L<cluster_addslotsrange|Net::Async::Redis::Commands/cluster_addslotsrange>, L<cluster_bumpepoch|Net::Async::Redis::Commands/cluster_bumpepoch>, L<cluster_count|Net::Async::Redis::Commands/cluster_count>, L<cluster_count_failure|Net::Async::Redis::Commands/cluster_count_failure>, L<cluster_count_failure_reports|Net::Async::Redis::Commands/cluster_count_failure_reports>, L<cluster_countkeysinslot|Net::Async::Redis::Commands/cluster_countkeysinslot>, L<cluster_delslots|Net::Async::Redis::Commands/cluster_delslots>, L<cluster_delslotsrange|Net::Async::Redis::Commands/cluster_delslotsrange>, L<cluster_failover|Net::Async::Redis::Commands/cluster_failover>, L<cluster_flushslots|Net::Async::Redis::Commands/cluster_flushslots>, L<cluster_forget|Net::Async::Redis::Commands/cluster_forget>, L<cluster_getkeysinslot|Net::Async::Redis::Commands/cluster_getkeysinslot>, L<cluster_help|Net::Async::Redis::Commands/cluster_help>, L<cluster_info|Net::Async::Redis::Commands/cluster_info>, L<cluster_keyslot|Net::Async::Redis::Commands/cluster_keyslot>, L<cluster_links|Net::Async::Redis::Commands/cluster_links>, L<cluster_meet|Net::Async::Redis::Commands/cluster_meet>, L<cluster_myid|Net::Async::Redis::Commands/cluster_myid>, L<cluster_myshardid|Net::Async::Redis::Commands/cluster_myshardid>, L<cluster_nodes|Net::Async::Redis::Commands/cluster_nodes>, L<cluster_replicas|Net::Async::Redis::Commands/cluster_replicas>, L<cluster_replicate|Net::Async::Redis::Commands/cluster_replicate>, L<cluster_reset|Net::Async::Redis::Commands/cluster_reset>, L<cluster_saveconfig|Net::Async::Redis::Commands/cluster_saveconfig>, L<cluster_set|Net::Async::Redis::Commands/cluster_set>, L<cluster_set_config|Net::Async::Redis::Commands/cluster_set_config>, L<cluster_set_config_epoch|Net::Async::Redis::Commands/cluster_set_config_epoch>, L<cluster_setslot|Net::Async::Redis::Commands/cluster_setslot>, L<cluster_shards|Net::Async::Redis::Commands/cluster_shards>, L<cluster_slaves|Net::Async::Redis::Commands/cluster_slaves>, L<cluster_slots|Net::Async::Redis::Commands/cluster_slots>, L<command|Net::Async::Redis::Commands/command>, L<command_count|Net::Async::Redis::Commands/command_count>, L<command_docs|Net::Async::Redis::Commands/command_docs>, L<command_getkeys|Net::Async::Redis::Commands/command_getkeys>, L<command_getkeysandflags|Net::Async::Redis::Commands/command_getkeysandflags>, L<command_help|Net::Async::Redis::Commands/command_help>, L<command_info|Net::Async::Redis::Commands/command_info>, L<command_list|Net::Async::Redis::Commands/command_list>, L<config|Net::Async::Redis::Commands/config>, L<config_get|Net::Async::Redis::Commands/config_get>, L<config_help|Net::Async::Redis::Commands/config_help>, L<config_resetstat|Net::Async::Redis::Commands/config_resetstat>, L<config_rewrite|Net::Async::Redis::Commands/config_rewrite>, L<config_set|Net::Async::Redis::Commands/config_set>, L<copy|Net::Async::Redis::Commands/copy>, L<dbsize|Net::Async::Redis::Commands/dbsize>, L<debug|Net::Async::Redis::Commands/debug>, L<decr|Net::Async::Redis::Commands/decr>, L<decrby|Net::Async::Redis::Commands/decrby>, L<del|Net::Async::Redis::Commands/del>, L<
dump
|Net::Async::Redis::Commands/
dump
>, L<echo|Net::Async::Redis::Commands/echo>, L<
eval
|Net::Async::Redis::Commands/
eval
>, L<eval_ro|Net::Async::Redis::Commands/eval_ro>, L<evalsha|Net::Async::Redis::Commands/evalsha>, L<evalsha_ro|Net::Async::Redis::Commands/evalsha_ro>, L<
exists
|Net::Async::Redis::Commands/
exists
>, L<expire|Net::Async::Redis::Commands/expire>, L<expireat|Net::Async::Redis::Commands/expireat>, L<expiretime|Net::Async::Redis::Commands/expiretime>, L<failover|Net::Async::Redis::Commands/failover>, L<fcall|Net::Async::Redis::Commands/fcall>, L<fcall_ro|Net::Async::Redis::Commands/fcall_ro>, L<flushall|Net::Async::Redis::Commands/flushall>, L<flushdb|Net::Async::Redis::Commands/flushdb>, L<function|Net::Async::Redis::Commands/function>, L<function_delete|Net::Async::Redis::Commands/function_delete>, L<function_dump|Net::Async::Redis::Commands/function_dump>, L<function_flush|Net::Async::Redis::Commands/function_flush>, L<function_help|Net::Async::Redis::Commands/function_help>, L<function_kill|Net::Async::Redis::Commands/function_kill>, L<function_list|Net::Async::Redis::Commands/function_list>, L<function_load|Net::Async::Redis::Commands/function_load>, L<function_restore|Net::Async::Redis::Commands/function_restore>, L<function_stats|Net::Async::Redis::Commands/function_stats>, L<geoadd|Net::Async::Redis::Commands/geoadd>, L<geodist|Net::Async::Redis::Commands/geodist>, L<geohash|Net::Async::Redis::Commands/geohash>, L<geopos|Net::Async::Redis::Commands/geopos>, L<georadius|Net::Async::Redis::Commands/georadius>, L<georadius_ro|Net::Async::Redis::Commands/georadius_ro>, L<georadiusbymember|Net::Async::Redis::Commands/georadiusbymember>, L<georadiusbymember_ro|Net::Async::Redis::Commands/georadiusbymember_ro>, L<geosearch|Net::Async::Redis::Commands/geosearch>, L<geosearchstore|Net::Async::Redis::Commands/geosearchstore>, L<get|Net::Async::Redis::Commands/get>, L<getbit|Net::Async::Redis::Commands/getbit>, L<getdel|Net::Async::Redis::Commands/getdel>, L<getex|Net::Async::Redis::Commands/getex>, L<getrange|Net::Async::Redis::Commands/getrange>, L<getset|Net::Async::Redis::Commands/getset>, L<hdel|Net::Async::Redis::Commands/hdel>, L<hello|Net::Async::Redis::Commands/hello>, L<hexists|Net::Async::Redis::Commands/hexists>, L<hexpire|Net::Async::Redis::Commands/hexpire>, L<hexpireat|Net::Async::Redis::Commands/hexpireat>, L<hexpiretime|Net::Async::Redis::Commands/hexpiretime>, L<hget|Net::Async::Redis::Commands/hget>, L<hgetall|Net::Async::Redis::Commands/hgetall>, L<hincrby|Net::Async::Redis::Commands/hincrby>, L<hincrbyfloat|Net::Async::Redis::Commands/hincrbyfloat>, L<hkeys|Net::Async::Redis::Commands/hkeys>, L<hlen|Net::Async::Redis::Commands/hlen>, L<hmget|Net::Async::Redis::Commands/hmget>, L<hmset|Net::Async::Redis::Commands/hmset>, L<hpersist|Net::Async::Redis::Commands/hpersist>, L<hpexpire|Net::Async::Redis::Commands/hpexpire>, L<hpexpireat|Net::Async::Redis::Commands/hpexpireat>, L<hpexpiretime|Net::Async::Redis::Commands/hpexpiretime>, L<hpttl|Net::Async::Redis::Commands/hpttl>, L<hrandfield|Net::Async::Redis::Commands/hrandfield>, L<hscan|Net::Async::Redis::Commands/hscan>, L<hset|Net::Async::Redis::Commands/hset>, L<hsetnx|Net::Async::Redis::Commands/hsetnx>, L<hstrlen|Net::Async::Redis::Commands/hstrlen>, L<httl|Net::Async::Redis::Commands/httl>, L<hvals|Net::Async::Redis::Commands/hvals>, L<incr|Net::Async::Redis::Commands/incr>, L<incrby|Net::Async::Redis::Commands/incrby>, L<incrbyfloat|Net::Async::Redis::Commands/incrbyfloat>, L<
keys
|Net::Async::Redis::Commands/
keys
>, L<lastsave|Net::Async::Redis::Commands/lastsave>, L<latency|Net::Async::Redis::Commands/latency>, L<latency_doctor|Net::Async::Redis::Commands/latency_doctor>, L<latency_graph|Net::Async::Redis::Commands/latency_graph>, L<latency_help|Net::Async::Redis::Commands/latency_help>, L<latency_histogram|Net::Async::Redis::Commands/latency_histogram>, L<latency_history|Net::Async::Redis::Commands/latency_history>, L<latency_latest|Net::Async::Redis::Commands/latency_latest>, L<latency_reset|Net::Async::Redis::Commands/latency_reset>, L<lcs|Net::Async::Redis::Commands/lcs>, L<lindex|Net::Async::Redis::Commands/lindex>, L<linsert|Net::Async::Redis::Commands/linsert>, L<llen|Net::Async::Redis::Commands/llen>, L<lmove|Net::Async::Redis::Commands/lmove>, L<lmpop|Net::Async::Redis::Commands/lmpop>, L<lolwut|Net::Async::Redis::Commands/lolwut>, L<lpop|Net::Async::Redis::Commands/lpop>, L<lpos|Net::Async::Redis::Commands/lpos>, L<lpush|Net::Async::Redis::Commands/lpush>, L<lpushx|Net::Async::Redis::Commands/lpushx>, L<lrange|Net::Async::Redis::Commands/lrange>, L<lrem|Net::Async::Redis::Commands/lrem>, L<lset|Net::Async::Redis::Commands/lset>, L<ltrim|Net::Async::Redis::Commands/ltrim>, L<memory|Net::Async::Redis::Commands/memory>, L<memory_doctor|Net::Async::Redis::Commands/memory_doctor>, L<memory_help|Net::Async::Redis::Commands/memory_help>, L<memory_malloc|Net::Async::Redis::Commands/memory_malloc>, L<memory_malloc_stats|Net::Async::Redis::Commands/memory_malloc_stats>, L<memory_purge|Net::Async::Redis::Commands/memory_purge>, L<memory_stats|Net::Async::Redis::Commands/memory_stats>, L<memory_usage|Net::Async::Redis::Commands/memory_usage>, L<mget|Net::Async::Redis::Commands/mget>, L<migrate|Net::Async::Redis::Commands/migrate>, L<module|Net::Async::Redis::Commands/module>, L<module_help|Net::Async::Redis::Commands/module_help>, L<module_list|Net::Async::Redis::Commands/module_list>, L<module_load|Net::Async::Redis::Commands/module_load>, L<module_loadex|Net::Async::Redis::Commands/module_loadex>, L<module_unload|Net::Async::Redis::Commands/module_unload>, L<monitor|Net::Async::Redis::Commands/monitor>, L<move|Net::Async::Redis::Commands/move>, L<mset|Net::Async::Redis::Commands/mset>, L<msetnx|Net::Async::Redis::Commands/msetnx>, L<object|Net::Async::Redis::Commands/object>, L<object_encoding|Net::Async::Redis::Commands/object_encoding>, L<object_freq|Net::Async::Redis::Commands/object_freq>, L<object_help|Net::Async::Redis::Commands/object_help>, L<object_idletime|Net::Async::Redis::Commands/object_idletime>, L<object_refcount|Net::Async::Redis::Commands/object_refcount>, L<persist|Net::Async::Redis::Commands/persist>, L<pexpire|Net::Async::Redis::Commands/pexpire>, L<pexpireat|Net::Async::Redis::Commands/pexpireat>, L<pexpiretime|Net::Async::Redis::Commands/pexpiretime>, L<pfadd|Net::Async::Redis::Commands/pfadd>, L<pfcount|Net::Async::Redis::Commands/pfcount>, L<pfdebug|Net::Async::Redis::Commands/pfdebug>, L<pfmerge|Net::Async::Redis::Commands/pfmerge>, L<pfselftest|Net::Async::Redis::Commands/pfselftest>, L<ping|Net::Async::Redis::Commands/ping>, L<psetex|Net::Async::Redis::Commands/psetex>, L<psubscribe|Net::Async::Redis::Commands/psubscribe>, L<psync|Net::Async::Redis::Commands/psync>, L<pttl|Net::Async::Redis::Commands/pttl>, L<publish|Net::Async::Redis::Commands/publish>, L<pubsub|Net::Async::Redis::Commands/pubsub>, L<pubsub_channels|Net::Async::Redis::Commands/pubsub_channels>, L<pubsub_help|Net::Async::Redis::Commands/pubsub_help>, L<pubsub_numpat|Net::Async::Redis::Commands/pubsub_numpat>, L<pubsub_numsub|Net::Async::Redis::Commands/pubsub_numsub>, L<pubsub_shardchannels|Net::Async::Redis::Commands/pubsub_shardchannels>, L<pubsub_shardnumsub|Net::Async::Redis::Commands/pubsub_shardnumsub>, L<punsubscribe|Net::Async::Redis::Commands/punsubscribe>, L<quit|Net::Async::Redis::Commands/quit>, L<randomkey|Net::Async::Redis::Commands/randomkey>, L<readonly|Net::Async::Redis::Commands/readonly>, L<readwrite|Net::Async::Redis::Commands/readwrite>, L<
rename
|Net::Async::Redis::Commands/
rename
>, L<renamenx|Net::Async::Redis::Commands/renamenx>, L<replconf|Net::Async::Redis::Commands/replconf>, L<replicaof|Net::Async::Redis::Commands/replicaof>, L<
reset
|Net::Async::Redis::Commands/
reset
>, L<restore|Net::Async::Redis::Commands/restore>, L<restore_asking|Net::Async::Redis::Commands/restore_asking>, L<rpop|Net::Async::Redis::Commands/rpop>, L<rpoplpush|Net::Async::Redis::Commands/rpoplpush>, L<rpush|Net::Async::Redis::Commands/rpush>, L<rpushx|Net::Async::Redis::Commands/rpushx>, L<sadd|Net::Async::Redis::Commands/sadd>, L<scan|Net::Async::Redis::Commands/scan>, L<scard|Net::Async::Redis::Commands/scard>, L<script|Net::Async::Redis::Commands/script>, L<script_debug|Net::Async::Redis::Commands/script_debug>, L<script_exists|Net::Async::Redis::Commands/script_exists>, L<script_flush|Net::Async::Redis::Commands/script_flush>, L<script_help|Net::Async::Redis::Commands/script_help>, L<script_kill|Net::Async::Redis::Commands/script_kill>, L<script_load|Net::Async::Redis::Commands/script_load>, L<sdiff|Net::Async::Redis::Commands/sdiff>, L<sdiffstore|Net::Async::Redis::Commands/sdiffstore>, L<
select
|Net::Async::Redis::Commands/
select
>, L<set|Net::Async::Redis::Commands/set>, L<setbit|Net::Async::Redis::Commands/setbit>, L<setex|Net::Async::Redis::Commands/setex>, L<setnx|Net::Async::Redis::Commands/setnx>, L<setrange|Net::Async::Redis::Commands/setrange>, L<sinter|Net::Async::Redis::Commands/sinter>, L<sintercard|Net::Async::Redis::Commands/sintercard>, L<sinterstore|Net::Async::Redis::Commands/sinterstore>, L<sismember|Net::Async::Redis::Commands/sismember>, L<slaveof|Net::Async::Redis::Commands/slaveof>, L<slowlog|Net::Async::Redis::Commands/slowlog>, L<slowlog_help|Net::Async::Redis::Commands/slowlog_help>, L<smembers|Net::Async::Redis::Commands/smembers>, L<smismember|Net::Async::Redis::Commands/smismember>, L<smove|Net::Async::Redis::Commands/smove>, L<
sort
|Net::Async::Redis::Commands/
sort
>, L<sort_ro|Net::Async::Redis::Commands/sort_ro>, L<spop|Net::Async::Redis::Commands/spop>, L<spublish|Net::Async::Redis::Commands/spublish>, L<srandmember|Net::Async::Redis::Commands/srandmember>, L<srem|Net::Async::Redis::Commands/srem>, L<sscan|Net::Async::Redis::Commands/sscan>, L<ssubscribe|Net::Async::Redis::Commands/ssubscribe>, L<strlen|Net::Async::Redis::Commands/strlen>, L<subscribe|Net::Async::Redis::Commands/subscribe>, L<
substr
|Net::Async::Redis::Commands/
substr
>, L<sunion|Net::Async::Redis::Commands/sunion>, L<sunionstore|Net::Async::Redis::Commands/sunionstore>, L<sunsubscribe|Net::Async::Redis::Commands/sunsubscribe>, L<swapdb|Net::Async::Redis::Commands/swapdb>, L<sync|Net::Async::Redis::Commands/sync>, L<touch|Net::Async::Redis::Commands/touch>, L<ttl|Net::Async::Redis::Commands/ttl>, L<type|Net::Async::Redis::Commands/type>, L<
unlink
|Net::Async::Redis::Commands/
unlink
>, L<unsubscribe|Net::Async::Redis::Commands/unsubscribe>, L<unwatch|Net::Async::Redis::Commands/unwatch>, L<
wait
|Net::Async::Redis::Commands/
wait
>, L<waitaof|Net::Async::Redis::Commands/waitaof>, L<watch|Net::Async::Redis::Commands/watch>, L<xack|Net::Async::Redis::Commands/xack>, L<xadd|Net::Async::Redis::Commands/xadd>, L<xautoclaim|Net::Async::Redis::Commands/xautoclaim>, L<xclaim|Net::Async::Redis::Commands/xclaim>, L<xdel|Net::Async::Redis::Commands/xdel>, L<xgroup|Net::Async::Redis::Commands/xgroup>, L<xgroup_create|Net::Async::Redis::Commands/xgroup_create>, L<xgroup_createconsumer|Net::Async::Redis::Commands/xgroup_createconsumer>, L<xgroup_delconsumer|Net::Async::Redis::Commands/xgroup_delconsumer>, L<xgroup_destroy|Net::Async::Redis::Commands/xgroup_destroy>, L<xgroup_help|Net::Async::Redis::Commands/xgroup_help>, L<xgroup_setid|Net::Async::Redis::Commands/xgroup_setid>, L<xinfo|Net::Async::Redis::Commands/xinfo>, L<xinfo_consumers|Net::Async::Redis::Commands/xinfo_consumers>, L<xinfo_groups|Net::Async::Redis::Commands/xinfo_groups>, L<xinfo_help|Net::Async::Redis::Commands/xinfo_help>, L<xinfo_stream|Net::Async::Redis::Commands/xinfo_stream>, L<xlen|Net::Async::Redis::Commands/xlen>, L<xpending|Net::Async::Redis::Commands/xpending>, L<xrange|Net::Async::Redis::Commands/xrange>, L<xread|Net::Async::Redis::Commands/xread>, L<xreadgroup|Net::Async::Redis::Commands/xreadgroup>, L<xrevrange|Net::Async::Redis::Commands/xrevrange>, L<xsetid|Net::Async::Redis::Commands/xsetid>, L<xtrim|Net::Async::Redis::Commands/xtrim>, L<zadd|Net::Async::Redis::Commands/zadd>, L<zcard|Net::Async::Redis::Commands/zcard>, L<zcount|Net::Async::Redis::Commands/zcount>, L<zdiff|Net::Async::Redis::Commands/zdiff>, L<zdiffstore|Net::Async::Redis::Commands/zdiffstore>, L<zincrby|Net::Async::Redis::Commands/zincrby>, L<zinter|Net::Async::Redis::Commands/zinter>, L<zintercard|Net::Async::Redis::Commands/zintercard>, L<zinterstore|Net::Async::Redis::Commands/zinterstore>, L<zlexcount|Net::Async::Redis::Commands/zlexcount>, L<zmpop|Net::Async::Redis::Commands/zmpop>, L<zmscore|Net::Async::Redis::Commands/zmscore>, L<zpopmax|Net::Async::Redis::Commands/zpopmax>, L<zpopmin|Net::Async::Redis::Commands/zpopmin>, L<zrandmember|Net::Async::Redis::Commands/zrandmember>, L<zrange|Net::Async::Redis::Commands/zrange>, L<zrangebylex|Net::Async::Redis::Commands/zrangebylex>, L<zrangebyscore|Net::Async::Redis::Commands/zrangebyscore>, L<zrangestore|Net::Async::Redis::Commands/zrangestore>, L<zrank|Net::Async::Redis::Commands/zrank>, L<zrem|Net::Async::Redis::Commands/zrem>, L<zremrangebylex|Net::Async::Redis::Commands/zremrangebylex>, L<zremrangebyrank|Net::Async::Redis::Commands/zremrangebyrank>, L<zremrangebyscore|Net::Async::Redis::Commands/zremrangebyscore>, L<zrevrange|Net::Async::Redis::Commands/zrevrange>, L<zrevrangebylex|Net::Async::Redis::Commands/zrevrangebylex>, L<zrevrangebyscore|Net::Async::Redis::Commands/zrevrangebyscore>, L<zrevrank|Net::Async::Redis::Commands/zrevrank>, L<zscan|Net::Async::Redis::Commands/zscan>, L<zscore|Net::Async::Redis::Commands/zscore>, L<zunion|Net::Async::Redis::Commands/zunion>, L<zunionstore|Net::Async::Redis::Commands/zunionstore>
=item L<IO::Async::Notifier>
L<add_child|IO::Async::Notifier/add_child>, L<adopt_future|IO::Async::Notifier/adopt_future>, L<adopted_futures|IO::Async::Notifier/adopted_futures>, L<can_event|IO::Async::Notifier/can_event>, L<children|IO::Async::Notifier/children>, L<configure_unknown|IO::Async::Notifier/configure_unknown>, L<debug_printf|IO::Async::Notifier/debug_printf>, L<get_loop|IO::Async::Notifier/get_loop>, L<invoke_error|IO::Async::Notifier/invoke_error>, L<invoke_event|IO::Async::Notifier/invoke_event>, L<loop|IO::Async::Notifier/loop>, L<make_event_cb|IO::Async::Notifier/make_event_cb>, L<maybe_invoke_event|IO::Async::Notifier/maybe_invoke_event>, L<maybe_make_event_cb|IO::Async::Notifier/maybe_make_event_cb>, L<notifier_name|IO::Async::Notifier/notifier_name>, L<parent|IO::Async::Notifier/parent>, L<remove_child|IO::Async::Notifier/remove_child>, L<remove_from_parent|IO::Async::Notifier/remove_from_parent>
=item L<Object::Pad::UNIVERSAL>
L<BUILDARGS|Object::Pad::UNIVERSAL/BUILDARGS>
=back
=head1 AUTHOR
Tom Molesworth C<< <TEAM
@cpan
.org> >> plus contributors as mentioned in
L<Net::Async::Redis/CONTRIBUTORS>.
=head1 LICENSE
Copyright Tom Molesworth and others 2015-2024.
Licensed under the same terms as Perl itself.