One of the outstanding features of Redis that make it is so loved among the developer community is the speed at which various operations are carried in a Redis database. So many things contribute to this efficiency in speed but one thing at the core of Redis regardless of how one chooses to look at it is its robust data structure.
The performance of every application that uses Redis is directly tied to how the application implements the various Redis data structures.
In this article, we are going to examine various data structures in Redis so as to give us insight on when it’s best to use which of the available data structures so that we can take full advantage of all the goodies Redis has to offer in our applications.
To get the most out of this article, I strongly recommend that you get a copy of Redis for your computer here OR use the online Redis server at https://try.redis.io/ to try out simple commands that will be used in the course of this article.
Basic knowledge of Redis
Below, we will examine a few of the data types that we have in Redis.
To get the type of value a key holds in Redis you can use the type command to do that as shown below.
This is the base and simplest data structure in Redis that can be associated with a key. Strings in Redis are binary safe and support polymorphism which means that a string key can be modified to hold binary, integer, or even floating-point values. String in Redis has a limit of 512 Mb data size that can be stored in them.
This is the command used to set or declare a Redis key to hold a string data type.
set day Saturday set name “Michael Owolabi”
Notice that I quote the value in the second example. We use the quote to group string that contains spaces in them.
This can be used to retrieve the value stored in a string Redis key.
Get name will return the value “Michael Owolabi” that was set earlier.
This command is used to increment the value of a key by exactly one (1).
This is possible if the actual value of the key is a number. Remember that we said Redis strings are binary-safe
Set price 10
Get price returns 11 because its value has been increased by one.
The full list and detailed explanation of various Redis String commands can be found here
A hash can have as many field-value pairs as possible until the size limit of a hash is reached which is 232 - 1 field-value pairs (more than 4 billion).
Redis hash is good for storing JSON like data especially when we’ll be working with the individual fields in the hash.
This is used to set the field-value pair of a hash key in Redis
hmset user:1 firstname Michael lastname Owolabi sex Male
This is the equivalent of a JSON structure like so:
This is used to retrieve the value of a single field in a Redis hask key. For example, suppose we want get the firstname of user:1 we’ll use the hmget command as below:
hmget user:1 firstname
Instead of retrieving the individual field value, this command is used to retrieve the entire field value in a Redis hash key.
The full list and detailed explanation of various Redis hash commands can be found here
Unlike String and Hash in Redis, we don’t set a list instead we add or push elements on to the list
This command is used to add an element to the list from the left. The L in the command denotes that we want the new element(s) to be added to the list from the left.
For example, suppose we want to add numbers from 1 through 10 to a number list from the left we do it by running the command below:
lpush numbers 1 2 3 4 5 6 7 8 9 10
Since Redis list is zero-indexed, this means that element at index zero is 10 and the one at index nine is 1 because the elements are added from the left.
This is simply the opposite of the LPUSH command. It adds elements to the array from the right instead of left as we have in LPUSH.
This is used to retrieve elements of the list using a range.
To retrieve all the elements of a list specify the range from 0 to -1 which is the end of the list.
lrange numbers 0 -1
To get the element at a specified range or index specify the desired start and end index for elements you want to retrieve.
Lrange numbers 0 0 will return the element at index zero (0).
This returns the length of the list.
llen numbers will return 10 since we have ten elements in the list.
The full list and detailed explanation of various Redis List commands can be found here
The set data structure in Redis is an unordered collection of unique strings.
This command adds a new element or elements to the set e.g SADD cities Lagos Ibadan Accra will add three elements to the cities set.
This command only adds unique elements to the set, so for example, if we have repetitive numbers in an SADD command, only one of the repeated numbers will be added to the set provided the number does not already exist in the set.
This is used to retrieve all the elements of a set. This command is a total blocking command that will only release system resources until all the elements of the set have been retrieved.
This is also similar to SMEMBERS command but only that this command runs iteratively or asynchronously without holding on to the system resources until all elements of the set have been retrieved.
This command is used to get the length of a set or just the total number of elements in a set.
This command is used to remove one or more elements from a set by the value.
SREM cities Accra
The full list and detailed explanation of various Redis Set commands can be found here
This is basically a set only that a score is assigned to unique elements as a form of ordering so this means sorted set can be unofficially called an ordered set.
If two elements in a sorted set have the same score, then the tie is broken by the lexical order of the elements in the set.
The score associated with each element is a floating-point number so even if an integer value is provided as the score of an element, it will be automatically converted to a float.
This is used to add an element or elements along with their score to the set.
zadd student-score 98 Michael 82 Bisi 78 Hamdallah 85 Chigozie
This retrieves the elements of a sorted set
zrange student-score 0 -1
This returns elements of the set based on their score. For example, suppose we want to find the students who scored 90 and above we can do it by using the zrangbyscore command as shown below:
zrangebyscore student-score 90 +inf
We can use -inf and +inf to denote a range especially when we don't know the bound of values.
To get the score of an element in a sorted set, we use the zscore command. Suppose we want to get the score of Hamdallah in our sorted set we use the zscore command to achieve that as follows:
zscore student-score Hamdallah
The full list and detailed explanation of various Redis Sorted Set commands can be found here
The knowledge of the Redis data structure is very vital to building a very efficient Redis based applications. Redis is fast and very efficient but with appropriate use and application of its data structures.
If you find this article interesting, don’t forget to drop a ❤️ and use the comment section for any further comments.