How to get all keys in Redis

Posted by: AJ Welch

Like other non-relational database engines, wrapping your mind around how Redis handles data structures and associations can sometimes be difficult. This is particularly true when Redis is compared to a more traditional relational databases with quarantined tables, each containing multiple rows and columns to house data.

Since Redis is non-relational, everything in the system is configured with basic key/value pairs at the simplest level. During development in particular, it can be tricky to keep track of everything that exists in the database already, so in this brief tutorial we’ll cover the method for retrieving all keys from a Redis database with some simple commands.

Most (but not all) objects use a key

For the vast majority of data storage with Redis, data will be stored in a simple key/value pair. This is best shown through the redis-cli (command line interface) using GET and SET commands.

For example, we may want to store some information about books, such as the title and author of a few of our favorites.

> SET title "The Hobbit"
> SET author "J.R.R. Tolkien"

The title and author are the keys we’ve set and the actual string values were specified after. So we can view them with GET, like so:

> GET title
"The Hobbit"
> GET author
"J.R.R. Tolkien"

Using namespaces

That’s all well and good, but how do we add another book? We can’t reuse the same title and author keys or we’ll overwrite the existing data. Instead, we can use namespace syntax by using a : separator and giving each title or author entry a unique numeric key:

> SET title:1 "The Hobbit"
> SET author:1 "J.R.R. Tolkien"
> SET title:2 "The Silmarillion"
> SET author:2 "The Silmarillion"

Now using GET requires adding the unique numeric key as well:

> GET title:1
"The Hobbit"
> GET title:2
"The Silmarillion"

Retrieving all existing keys

As it turns out, every SET command we issued above created a new, unique key within our Redis database. To get a list of all current keys that exist, simply use the KEYS command:

> KEYS *
1) "title:1"
2) "title:2"
3) "title"
4) "author:2"
5) "author"
6) "author:1"

By following KEYS with an asterisk (*) – which acts as a wildcard search – we’re asking Redis to retrieve all keys in the system. Thus, we not only see our two original title and author keys but also the four enumerated versions that followed as well.

The syntax following KEYS can be used to search for specific words or phrases within the key, or the exact match as well. Here we want all keys that contain the text 'title':

> KEYS *title*
1) "title:1"
2) "title:2"
3) "title"

CAUTION: As mentioned in the official documentation, it is advisable to avoid using the KEYS command on very large databases, but in particular avoid using it in a production environment. Since KEYS is returning potentially every key in the system, this can have a dramatic negative impact on performance.