scan-hkeys
Containerized utility to scan Redis keys and print hkeys of any hashes.
Config
See lib/spec.js
pattern: description: 'the matching pattern for Redis scan' example: '*' port: description: 'the Redis port' default: 6379 host: description: 'the Redis host' default: 'localhost'
where the default Redis host
is localhost
Implementation
See app/index.js
let cursor; while true const result = await ; cursor = ; const keys = result1; const types = await ; const hashesKeys = keys; if hashesKeyslength count += hashesKeyslength; const results = await ; hashesKeys;
Development
For development, you can run as follows:
git clone https://github.com/evanx/scan-hkeys.git
cat package.json
npm install
pattern='*' npm start
Docker
docker build -t scan-hkeys https://github.com/evanx/scan-hkeys.git
where tagged as image scan-hkeys
docker run --network=host -e pattern='*' scan-hkeys
where --network-host
connects the container to your localhost
bridge. The default Redis host localhost
works in that case.
Since the containerized app has access to the host's Redis instance, you should inspect the source.
See Dockerfile
FROM mhart/alpine
ADD package.json .
RUN npm install --silent
ADD lib lib
CMD ["node", "lib/index.js"]
Demo script
See scripts/demo.sh
docker network create -d bridge test-hkeys-networkcontainer=`docker run --network=test-hkeys-network \ --name test-hkeys-redis -d tutum/redis`password=`docker logs $container | grep '^\s*redis-cli -a' | sed -e 's/^\s*redis-cli -a \(\w*\) .*$/\1/'`redisHost=`docker inspect $container | grep '"IPAddress":' | tail -1 | sed 's/.*"\([0-9\.]*\)",/\1/'`redis-cli -a $password -h $redisHost hset mytest:64:h name 'Pottery Place'redis-cli -a $password -h $redisHost hset mytest:64:h address '48 High Street'docker run --network=test-hkeys-network \ -e host=$redisHost -e password=$password \ -e pattern=mytest:*:h evanxsummers/scan-hkeysdocker rm -f `docker ps -q -f name=test-hkeys-redis`docker network rm test-hkeys-network
where we create an isolated Redis container and use redis-cli
to create hashes with the following two fields:
redis-cli -a $password -h $redisHost hset mytest:64:h name 'Pottery Place'
redis-cli -a $password -h $redisHost hset mytest:64:h address '48 High Street'
and invoke the utility from the Dockerhub image evanxsummers/scan-hkeys
docker run --network=test-hkeys-network \
-e host=$redisHost -e password=$password \
-e pattern=mytest:*:h evanxsummers/scan-hkeys
which prints a line for the key with its two field names from hkeys
mytest:64:h name address