Get Redis keys and values at command prompt

shantanuo picture shantanuo · Nov 10, 2011 · Viewed 74.6k times · Source

I have a very small data saved in Redis and the following is working as expected that will allow me to download all keys.

redis-cli keys * 

Is there any way to get the keys+values *?

Answer

seppo0010 picture seppo0010 · Nov 10, 2011

There's no command for that, but you can write a script to do so.

You will need to perform for each key a "type" command:

> type <key>

and depending on the response perform:

  • for "string": get <key>
  • for "hash": hgetall <key>
  • for "list": lrange <key> 0 -1
  • for "set": smembers <key>
  • for "zset": zrange <key> 0 -1 withscores

Keep in mind that for hashes and sorted sets you will be getting the keys/scores and values.

A possible sh implementation:

#!/bin/sh -eu
keys=`redis-cli keys '*'`
if [ "$keys" ]; then
    echo "$keys" | while IFS= read -r key; do
        type=`echo | redis-cli type "$key"`
        case "$type" in
            string) value=`echo | redis-cli get "$key"`;;
            hash) value=`echo | redis-cli hgetall "$key"`;;
            set) value=`echo | redis-cli smembers "$key"`;;
            list) value=`echo | redis-cli lrange "$key" 0 -1`;;
            zset) value=`echo | redis-cli zrange "$key" 0 -1 withscores`;;
        esac
        echo "> $key ($type):"
        echo "$value" | sed -E 's/^/    /'
    done
fi

But do note:

Warning: consider KEYS as a command that should only be used in production environments with extreme care. It may ruin performance when it is executed against large databases. This command is intended for debugging and special operations, such as changing your keyspace layout.

https://redis.io/commands/keys