Recursively scans the keyspace of a Redis 2.8 instance using SCAN, HSCAN, ZSCAN, & SSCAN as well as Lists.
Fairly safe in a production environment as it does NOT use KEYS * to iterate.
Optionally pass a redis pattern to filter from.
npm install redisscan
var redisScan = require('redisscan');
var redis = require('redis').createClient();
redisScan({
redis: redis,
pattern: 'awesome:key:prefix:*',
keys_only: false,
each_callback: function (type, key, subkey, length, value, cb) {
console.log(type, key, subkey, length, value);
cb();
},
done_callback: function (err) {
console.log("-=-=-=-=-=--=-=-=-");
redis.quit();
}
});
-
redis
: requirednode-redis
client instance -
pattern
: optional wildcard key pattern to match, e.g:some:key:pattern:*
docs -
keys_only
: optional boolean -- returns nothing but keys, no types,lengths,values etc. (defaults tofalse
) -
count_amt
: optional positive/non-zero integer -- redis hint for work done per SCAN operation (defaults to 10) docs -
each_callback
: requiredfunction (type, key, subkey, length, value, next)
This is called for every string, and every subkey/value in a container when not usingkeys_only
, so outer keys may show up multiple times.-
type
may be"string"
,"hash"
,"set"
,"zset"
,"list"
-
key
is the redis key -
subkey
may benull
or populated with a hash key -
length
is the length of a set or list -
value
is the value of the key or subkey when appropriate -
next()
should be called as a function with no arguments if successful or anError
object if not.
-
-
done_callback
: optional function called when scanning completes with one argument, andError
object if an error ws raised
If values are changing, there is no guarantee on value integrity. This is not atomic. I recommend using a lock pattern with this function.
License MIT (c) 2014 Nathanael C. Fritz