Retrieving/Listing all key/value pairs in a Redis db
RubyRubygemsNosqlRedisOhmRuby Problem Overview
I'm using an ORM called Ohm in Ruby that works on top of Redis and am curious to find out how the data is actually stored. I was wondering if there is way to list all the keys/values in a Redis db.
Any lead will go a long way in helping me out (I'm basically stuck atm). Thanks in advance!
Update:
A note for others trying this out using redis-cli, use this:
$ redis-cli keys
* (press * followed by Ctrl-D)
... (prints a list of keys and exits)
$
Thanks @antirez and @hellvinz!
Ruby Solutions
Solution 1 - Ruby
You can explore the Redis dataset using the redis-cli
tool included in the Redis distribution.
Just start the tool without arguments, then type commands to explore the dataset.
For instance KEYS
keys *
you'll see all the keys available.
Then you can use the TYPE
command to check what type is a given key, if it's a list you can retrieve the elements inside using LRANGE mykey 0 -1
. If it is a Set you'll use instead SMEMBERS mykey
and so forth. Check the Redis documentation for a list of all the available commands and how they work.
Solution 2 - Ruby
From the command line, you can also use the dump command, available since Redis 2.6.0
redis-cli KEYS \* | xargs -n 1 redis-cli dump
(note that this also works with the get command for earlier versions if you don't mind)
UPDATE (V2.8 or greater): SCAN is a superior alternative to KEYS, in the sense that it does not block the server nor does it consume significant resources. Prefer using it.
Solution 3 - Ruby
Just adding a practical ruby example to the antirez response (I won't dare compete with him)
irb(main):002:0> require 'rubygems'
=> true
irb(main):003:0> require 'redis'
=> true
irb(main):004:0> r = Redis.new
=> #<Redis:0x8605b64 @sock=#<TCPSocket:0x8605ab0>, @timeout=5, @port=6379, @db=0, @host="127.0.0.1">
irb(main):005:0> r.keys('*')
Solution 4 - Ruby
I ended up here because I was looking for how to backup all key/values in redis. If this applies to you, this command might help:
redis-cli bgsave