Async-Redis

 view release on metacpan or  search on metacpan

lib/Async/Redis/KeyExtractor.pm  view on Meta::CPAN

    'EVALSHA_RO' => \&_keys_for_eval,
    'EVAL_RO'   => \&_keys_for_eval,
    'FCALL'     => \&_keys_for_eval,
    'FCALL_RO'  => \&_keys_for_eval,

    # HyperLogLog commands
    'PFADD'     => sub { (0) },
    'PFCOUNT'   => sub { (0 .. $#_) },
    'PFMERGE'   => sub { (0 .. $#_) },

    # Bit commands (first arg is key)
    'GETBIT'    => sub { (0) },
    'SETBIT'    => sub { (0) },
    'BITCOUNT'  => sub { (0) },
    'BITPOS'    => sub { (0) },

    # Hash length
    'HSTRLEN'   => sub { (0) },

    # Sorted set multi-score lookup
    'ZMSCORE'   => sub { (0) },

    # BITOP - skip operation arg
    'BITOP'     => sub { (1 .. $#_) },

    # Stream commands
    'XADD'      => sub { (0) },
    'XLEN'      => sub { (0) },
    'XRANGE'    => sub { (0) },
    'XREVRANGE' => sub { (0) },
    'XREAD'     => \&_keys_for_xread,
    'XREADGROUP' => \&_keys_for_xread,
    'XINFO'     => \&_keys_for_xinfo,
    'XGROUP'    => \&_keys_for_xgroup,
    'XACK'      => sub { (0) },
    'XCLAIM'    => sub { (0) },
    'XAUTOCLAIM' => sub { (0) },
    'XPENDING'  => sub { (0) },
    'XTRIM'     => sub { (0) },
    'XDEL'      => sub { (0) },
    'XSETID'    => sub { (0) },

    # Geo commands
    'GEOADD'    => sub { (0) },
    'GEOPOS'    => sub { (0) },
    'GEODIST'   => sub { (0) },
    'GEOHASH'   => sub { (0) },
    'GEORADIUS' => \&_keys_for_georadius,
    'GEORADIUSBYMEMBER' => \&_keys_for_georadius,
    'GEOSEARCH' => sub { (0) },
    'GEOSEARCHSTORE' => sub { (0, 1) },

    # MIGRATE - special handling
    'MIGRATE'   => \&_keys_for_migrate,

    # SORT
    'SORT'      => sub { (0) },
    'SORT_RO'   => sub { (0) },

    # SCAN commands return patterns, not keys - first arg is key for HSCAN/SSCAN/ZSCAN
    'SCAN'      => sub { () },  # No key, cursor-based

    # Pub/Sub - channels, not keys
    'PUBLISH'   => sub { () },
    'SUBSCRIBE' => sub { () },
    'UNSUBSCRIBE' => sub { () },
    'PSUBSCRIBE' => sub { () },
    'PUNSUBSCRIBE' => sub { () },

    # Server commands - no keys
    'PING'      => sub { () },
    'ECHO'      => sub { () },
    'AUTH'      => sub { () },
    'SELECT'    => sub { () },
    'INFO'      => sub { () },
    'DBSIZE'    => sub { () },
    'FLUSHDB'   => sub { () },
    'FLUSHALL'  => sub { () },
    'SAVE'      => sub { () },
    'BGSAVE'    => sub { () },
    'LASTSAVE'  => sub { () },
    'TIME'      => sub { () },
    'CONFIG'    => sub { () },
    'CLIENT'    => sub { () },
    'SLOWLOG'   => sub { () },
    'DEBUG'     => sub { () },
    'MEMORY'    => sub { () },
    'MODULE'    => sub { () },
    'ACL'       => sub { () },
    'COMMAND'   => sub { () },
    'MULTI'     => sub { () },
    'EXEC'      => sub { () },
    'DISCARD'   => sub { () },
    'UNWATCH'   => sub { () },
    'SCRIPT'    => sub { () },
    'CLUSTER'   => sub { () },
    'READONLY'  => sub { () },
    'READWRITE' => sub { () },
    'WAIT'      => sub { () },
    'KEYS'      => sub { () },  # Pattern, not literal key
    'RANDOMKEY' => sub { () },
);

# Fallback patterns for unknown commands
our @FALLBACK_PATTERNS = (
    # Hash commands: first arg is key
    [ qr/^H(?:SET|GET|DEL|EXISTS|INCR|LEN|KEYS|VALS|GETALL|SCAN|MGET|MSET)/i, sub { (0) } ],

    # List commands: first arg is key
    [ qr/^[LR](?:PUSH|POP|LEN|INDEX|RANGE|SET|TRIM|REM|INSERT|POS)/i, sub { (0) } ],

    # Set commands: first arg is key
    [ qr/^S(?:ADD|REM|MEMBERS|ISMEMBER|CARD|POP|RANDMEMBER|SCAN)/i, sub { (0) } ],

    # Sorted set commands: first arg is key
    [ qr/^Z(?:ADD|REM|SCORE|RANK|RANGE|CARD|COUNT|INCRBY|SCAN)/i, sub { (0) } ],

    # Generic fallback: assume first arg is key for unknown X* commands (streams)
    [ qr/^X/i, sub { (0) } ],
);



( run in 1.419 second using v1.01-cache-2.11-cpan-39bf76dae61 )