DEV Community

Cover image for Behind the Scenes with Redis: The Power of RESP Protocol
nayanraj adhikary
nayanraj adhikary

Posted on

1

Behind the Scenes with Redis: The Power of RESP Protocol

Ever wonder how Redis maintains its simplicity and efficiency over the network?

Redis (Remote Dictionary Server) is a widely used in-memory data structure store that can be used as a database, cache, and message broker. One of the key aspects of Redis's efficiency and speed is its communication protocol, RESP (REdis Serialization Protocol).

This RESP helps the Redis client to communicate with the Redis server. This protocol was designed specifically for Redis, but you can use it in any client-server project.

RESP can serialize different data types including integers, strings, and arrays. It also features an error-specific type. A client sends a request to the Redis server as an array of strings.

RESP versions

  • As every protocol we have versions for RESP. Here are some of them.
  • Redis 2.0 supports RESP2 which become the standard
  • Redis 2 - Redis 7 supports RESP2 and RESP3

RESP Magic

We have many data types that RESP supports. Let's look into some of them

Each of the data types has SET and GET commands for more inside you can look in the Redis Docs.

  • Simple String: Simple strings are encoded with a + prefix followed by the string and terminated with \r\n.
 +OK\r\n
Enter fullscreen mode Exit fullscreen mode
  • Errors: Errors are similar to simple strings but start with - prefix
-Error message\r\n
Enter fullscreen mode Exit fullscreen mode
  • Integers: Integers are encoded with a : prefix followed by the integer and terminated with \r\n.
:1000\r\n
Enter fullscreen mode Exit fullscreen mode
  • Arrays: Arrays are used to transmit multiple RESP types. They start with a * prefix followed by the number of elements in the array, a \r\n, and then the actual elements in RESP format.
*2\r\n$3\r\nfoo\r\n$3\r\nbar\r\n
Enter fullscreen mode Exit fullscreen mode

If you notice each of the elements are separated by \r\n

Communication Process

When a client sends a command to the Redis server, it uses the RESP protocol to format the command. The server parses the RESP message, executes the command, and sends a RESP-formatted response back to the client.

Example
Let's consider a simple GET command:

*2\r\n$3\r\nGET\r\n$3\r\nkey\r\n
Enter fullscreen mode Exit fullscreen mode

Server response (if the key exists):

$5\r\nvalue\r\n
Enter fullscreen mode Exit fullscreen mode

Server response (if the key does not exist):

$-1\r\n
Enter fullscreen mode Exit fullscreen mode

Each of these is translated so that it is readable by removing the \r\n.

One example with a data type

Hashes
This is the most used data type, Hashes are maps between string fields and string values, which are perfect for representing objects.

*4\r\n$4\r\nHSET\r\n$6\r\nmyhash\r\n$4\r\nname\r\n$5\r\nAlice\r\n
Enter fullscreen mode Exit fullscreen mode

Server response

:1\r\n
Enter fullscreen mode Exit fullscreen mode

Getting hash field

Client request:

*3\r\n$4\r\nHGET\r\n$6\r\nmyhash\r\n$4\r\nname\r\n
Enter fullscreen mode Exit fullscreen mode

Server response:

$5\r\nAlice\r\n
Enter fullscreen mode Exit fullscreen mode

Conclusion

RESP plays a crucial role in Redis's performance and efficiency, providing a simple yet powerful way to encode and decode messages between clients and servers. Understanding RESP and how it handles different Redis data types can help you make the most of Redis in your applications. Whether you're dealing with strings, lists, hashes, or sets, RESP ensures that communication is fast, reliable, and easy to work with.

What we learned

  1. How does the RESP help us serialize Redis command over the network and help us achieve the performance?

Wanna know more about RESP more

Thanks for reading a small and simple blog for RESP. Giving a Like and Follow would make me motivated.

API Trace View

Struggling with slow API calls?

Dan Mindru walks through how he used Sentry's new Trace View feature to shave off 22.3 seconds from an API call.

Get a practical walkthrough of how to identify bottlenecks, split tasks into multiple parallel tasks, identify slow AI model calls, and more.

Read more β†’

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

πŸ‘‹ Kindness is contagious

Please leave a ❀️ or a friendly comment on this post if you found it helpful!

Okay