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 )