Group
Extension

Net-Async-Redis/lib/Net/Async/Redis/Cluster.pod

=encoding utf8

=for comment POD_DERIVED_INDEX_GENERATED
The following documentation is automatically generated.  Please do not edit
this file, but rather the original, inline with Net::Async::Redis::Cluster
at lib/Net/Async/Redis/Cluster.pm
(on the system that originally ran this).
If you do edit this file, and don't want your changes to be removed, make
sure you change the first line.

=cut

=head1 NAME

Net::Async::Redis::Cluster - support for cluster routing

=head1 SYNOPSIS

 use IO::Async::Loop;
 use Net::Async::Redis::Cluster;
 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
by options such as the L<https://github.com/twitter/twemproxy|twemproxy>
proxy routing dæmon, or a service mesh such as L<https://istio.io/|istio>.

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<FT_ADD|Net::Async::Redis::Commands/FT_ADD>, L<FT_AGGREGATE|Net::Async::Redis::Commands/FT_AGGREGATE>, L<FT_ALIASADD|Net::Async::Redis::Commands/FT_ALIASADD>, L<FT_ALIASDEL|Net::Async::Redis::Commands/FT_ALIASDEL>, L<FT_ALIASUPDATE|Net::Async::Redis::Commands/FT_ALIASUPDATE>, L<FT_ALTER|Net::Async::Redis::Commands/FT_ALTER>, L<FT_CONFIG|Net::Async::Redis::Commands/FT_CONFIG>, L<FT_CREATE|Net::Async::Redis::Commands/FT_CREATE>, L<FT_CURSOR|Net::Async::Redis::Commands/FT_CURSOR>, L<FT_DEL|Net::Async::Redis::Commands/FT_DEL>, L<FT_DICTADD|Net::Async::Redis::Commands/FT_DICTADD>, L<FT_DICTDEL|Net::Async::Redis::Commands/FT_DICTDEL>, L<FT_DICTDUMP|Net::Async::Redis::Commands/FT_DICTDUMP>, L<FT_DROP|Net::Async::Redis::Commands/FT_DROP>, L<FT_DROPINDEX|Net::Async::Redis::Commands/FT_DROPINDEX>, L<FT_EXPLAIN|Net::Async::Redis::Commands/FT_EXPLAIN>, L<FT_EXPLAINCLI|Net::Async::Redis::Commands/FT_EXPLAINCLI>, L<FT_GET|Net::Async::Redis::Commands/FT_GET>, L<FT_INFO|Net::Async::Redis::Commands/FT_INFO>, L<FT_MGET|Net::Async::Redis::Commands/FT_MGET>, L<FT_PROFILE|Net::Async::Redis::Commands/FT_PROFILE>, L<FT_SEARCH|Net::Async::Redis::Commands/FT_SEARCH>, L<FT_SPELLCHECK|Net::Async::Redis::Commands/FT_SPELLCHECK>, L<FT_SUGADD|Net::Async::Redis::Commands/FT_SUGADD>, L<FT_SUGDEL|Net::Async::Redis::Commands/FT_SUGDEL>, L<FT_SUGGET|Net::Async::Redis::Commands/FT_SUGGET>, L<FT_SUGLEN|Net::Async::Redis::Commands/FT_SUGLEN>, L<FT_SYNADD|Net::Async::Redis::Commands/FT_SYNADD>, L<FT_SYNDUMP|Net::Async::Redis::Commands/FT_SYNDUMP>, L<FT_SYNFORCEUPDATE|Net::Async::Redis::Commands/FT_SYNFORCEUPDATE>, L<FT_SYNUPDATE|Net::Async::Redis::Commands/FT_SYNUPDATE>, L<FT_TAGVALS|Net::Async::Redis::Commands/FT_TAGVALS>, L<FT__ALIASADDIFNX|Net::Async::Redis::Commands/FT__ALIASADDIFNX>, L<FT__ALIASDELIFX|Net::Async::Redis::Commands/FT__ALIASDELIFX>, L<FT__ALTERIFNX|Net::Async::Redis::Commands/FT__ALTERIFNX>, L<FT__CREATEIFNX|Net::Async::Redis::Commands/FT__CREATEIFNX>, L<FT__DROPIFX|Net::Async::Redis::Commands/FT__DROPIFX>, L<FT__DROPINDEXIFX|Net::Async::Redis::Commands/FT__DROPINDEXIFX>, L<FT__LIST|Net::Async::Redis::Commands/FT__LIST>, 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<bf_add|Net::Async::Redis::Commands/bf_add>, L<bf_card|Net::Async::Redis::Commands/bf_card>, L<bf_debug|Net::Async::Redis::Commands/bf_debug>, L<bf_exists|Net::Async::Redis::Commands/bf_exists>, L<bf_info|Net::Async::Redis::Commands/bf_info>, L<bf_insert|Net::Async::Redis::Commands/bf_insert>, L<bf_loadchunk|Net::Async::Redis::Commands/bf_loadchunk>, L<bf_madd|Net::Async::Redis::Commands/bf_madd>, L<bf_mexists|Net::Async::Redis::Commands/bf_mexists>, L<bf_reserve|Net::Async::Redis::Commands/bf_reserve>, L<bf_scandump|Net::Async::Redis::Commands/bf_scandump>, 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<cf_add|Net::Async::Redis::Commands/cf_add>, L<cf_addnx|Net::Async::Redis::Commands/cf_addnx>, L<cf_compact|Net::Async::Redis::Commands/cf_compact>, L<cf_count|Net::Async::Redis::Commands/cf_count>, L<cf_debug|Net::Async::Redis::Commands/cf_debug>, L<cf_del|Net::Async::Redis::Commands/cf_del>, L<cf_exists|Net::Async::Redis::Commands/cf_exists>, L<cf_info|Net::Async::Redis::Commands/cf_info>, L<cf_insert|Net::Async::Redis::Commands/cf_insert>, L<cf_insertnx|Net::Async::Redis::Commands/cf_insertnx>, L<cf_loadchunk|Net::Async::Redis::Commands/cf_loadchunk>, L<cf_mexists|Net::Async::Redis::Commands/cf_mexists>, L<cf_reserve|Net::Async::Redis::Commands/cf_reserve>, L<cf_scandump|Net::Async::Redis::Commands/cf_scandump>, 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<cms_incrby|Net::Async::Redis::Commands/cms_incrby>, L<cms_info|Net::Async::Redis::Commands/cms_info>, L<cms_initbydim|Net::Async::Redis::Commands/cms_initbydim>, L<cms_initbyprob|Net::Async::Redis::Commands/cms_initbyprob>, L<cms_merge|Net::Async::Redis::Commands/cms_merge>, L<cms_query|Net::Async::Redis::Commands/cms_query>, 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<json_arrappend|Net::Async::Redis::Commands/json_arrappend>, L<json_arrindex|Net::Async::Redis::Commands/json_arrindex>, L<json_arrinsert|Net::Async::Redis::Commands/json_arrinsert>, L<json_arrlen|Net::Async::Redis::Commands/json_arrlen>, L<json_arrpop|Net::Async::Redis::Commands/json_arrpop>, L<json_arrtrim|Net::Async::Redis::Commands/json_arrtrim>, L<json_clear|Net::Async::Redis::Commands/json_clear>, L<json_debug|Net::Async::Redis::Commands/json_debug>, L<json_del|Net::Async::Redis::Commands/json_del>, L<json_forget|Net::Async::Redis::Commands/json_forget>, L<json_get|Net::Async::Redis::Commands/json_get>, L<json_merge|Net::Async::Redis::Commands/json_merge>, L<json_mget|Net::Async::Redis::Commands/json_mget>, L<json_mset|Net::Async::Redis::Commands/json_mset>, L<json_numincrby|Net::Async::Redis::Commands/json_numincrby>, L<json_nummultby|Net::Async::Redis::Commands/json_nummultby>, L<json_numpowby|Net::Async::Redis::Commands/json_numpowby>, L<json_objkeys|Net::Async::Redis::Commands/json_objkeys>, L<json_objlen|Net::Async::Redis::Commands/json_objlen>, L<json_resp|Net::Async::Redis::Commands/json_resp>, L<json_set|Net::Async::Redis::Commands/json_set>, L<json_strappend|Net::Async::Redis::Commands/json_strappend>, L<json_strlen|Net::Async::Redis::Commands/json_strlen>, L<json_toggle|Net::Async::Redis::Commands/json_toggle>, L<json_type|Net::Async::Redis::Commands/json_type>, 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<search_CLUSTERINFO|Net::Async::Redis::Commands/search_CLUSTERINFO>, L<search_CLUSTERREFRESH|Net::Async::Redis::Commands/search_CLUSTERREFRESH>, L<search_CLUSTERSET|Net::Async::Redis::Commands/search_CLUSTERSET>, 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<tdigest_add|Net::Async::Redis::Commands/tdigest_add>, L<tdigest_byrank|Net::Async::Redis::Commands/tdigest_byrank>, L<tdigest_byrevrank|Net::Async::Redis::Commands/tdigest_byrevrank>, L<tdigest_cdf|Net::Async::Redis::Commands/tdigest_cdf>, L<tdigest_create|Net::Async::Redis::Commands/tdigest_create>, L<tdigest_info|Net::Async::Redis::Commands/tdigest_info>, L<tdigest_max|Net::Async::Redis::Commands/tdigest_max>, L<tdigest_merge|Net::Async::Redis::Commands/tdigest_merge>, L<tdigest_min|Net::Async::Redis::Commands/tdigest_min>, L<tdigest_quantile|Net::Async::Redis::Commands/tdigest_quantile>, L<tdigest_rank|Net::Async::Redis::Commands/tdigest_rank>, L<tdigest_reset|Net::Async::Redis::Commands/tdigest_reset>, L<tdigest_revrank|Net::Async::Redis::Commands/tdigest_revrank>, L<tdigest_trimmed_mean|Net::Async::Redis::Commands/tdigest_trimmed_mean>, L<timeseries_CLUSTERSET|Net::Async::Redis::Commands/timeseries_CLUSTERSET>, L<timeseries_CLUSTERSETFROMSHARD|Net::Async::Redis::Commands/timeseries_CLUSTERSETFROMSHARD>, L<timeseries_FORCESHARDSCONNECTION|Net::Async::Redis::Commands/timeseries_FORCESHARDSCONNECTION>, L<timeseries_HELLO|Net::Async::Redis::Commands/timeseries_HELLO>, L<timeseries_INFOCLUSTER|Net::Async::Redis::Commands/timeseries_INFOCLUSTER>, L<timeseries_INNERCOMMUNICATION|Net::Async::Redis::Commands/timeseries_INNERCOMMUNICATION>, L<timeseries_NETWORKTEST|Net::Async::Redis::Commands/timeseries_NETWORKTEST>, L<timeseries_REFRESHCLUSTER|Net::Async::Redis::Commands/timeseries_REFRESHCLUSTER>, L<topk_add|Net::Async::Redis::Commands/topk_add>, L<topk_count|Net::Async::Redis::Commands/topk_count>, L<topk_incrby|Net::Async::Redis::Commands/topk_incrby>, L<topk_info|Net::Async::Redis::Commands/topk_info>, L<topk_list|Net::Async::Redis::Commands/topk_list>, L<topk_query|Net::Async::Redis::Commands/topk_query>, L<topk_reserve|Net::Async::Redis::Commands/topk_reserve>, L<touch|Net::Async::Redis::Commands/touch>, L<ts_add|Net::Async::Redis::Commands/ts_add>, L<ts_alter|Net::Async::Redis::Commands/ts_alter>, L<ts_create|Net::Async::Redis::Commands/ts_create>, L<ts_createrule|Net::Async::Redis::Commands/ts_createrule>, L<ts_decrby|Net::Async::Redis::Commands/ts_decrby>, L<ts_del|Net::Async::Redis::Commands/ts_del>, L<ts_deleterule|Net::Async::Redis::Commands/ts_deleterule>, L<ts_get|Net::Async::Redis::Commands/ts_get>, L<ts_incrby|Net::Async::Redis::Commands/ts_incrby>, L<ts_info|Net::Async::Redis::Commands/ts_info>, L<ts_madd|Net::Async::Redis::Commands/ts_madd>, L<ts_mget|Net::Async::Redis::Commands/ts_mget>, L<ts_mrange|Net::Async::Redis::Commands/ts_mrange>, L<ts_mrevrange|Net::Async::Redis::Commands/ts_mrevrange>, L<ts_queryindex|Net::Async::Redis::Commands/ts_queryindex>, L<ts_range|Net::Async::Redis::Commands/ts_range>, L<ts_revrange|Net::Async::Redis::Commands/ts_revrange>, 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.



Powered by Groonga
Maintained by Kenichi Ishigaki <ishigaki@cpan.org>. If you find anything, submit it on GitHub.