Data Modeling with Redis - Data Types Visualization

This post is a short introduction to data structures available in Redis. Nothing new, right? Right. However, the chosen approach here is to visualize the most common Redis data structures with ASCII side by side with a simple redis-cli command.

Overview

Besides a sample create command the following section deliberately provides the ASCII visualizations only and no further information. This can be found all over the web. Some good sources as well as the plain text ASCII are listed at the end.

Redis Data Types

The following data type visualizations always picture how to store three values and the corresponding amount of keys to a Redis database instance. And ... indicates that there could follow more keys or values.

Redis Strings (Key Value)



MSET key1 value key2 value key3 value

Redis Lists



LPUSH key value value value or RPUSH key value value value

Redis Hashes



HMSET key field1 value field2 value field3 value

Redis Sets



SADD key uniqueMember1 uniqueMember2 uniqueMember3

Redis Sorted Sets



ZADD key score uniqueMember1 score uniqueMember2 score uniqueMember3

Redis Geopositions

Same as Sorted Set: Score is calculated from latitude and longitude (Geohash).

GEOADD key long lat uniqueMember1 long lat uniqueMember2 long lat uniqueMember3

Redis Bitmaps



SETBIT key 0 0 or SETBIT key 0 1

Redis HyperLogLogs



PFADD uniqueMember1 uniqueMember2 uniqueMember3

Update: There are also two follow-up blog posts now available: Data Modeling with Redis - German Postcodes Geoposition and Data Modeling with Redis - German Postcodes Advanced

Further Information

Redis Docs & Command Reference:

https://redis.io/topics/data-types-intro

https://redis.io/commands/

DZone Refaced for Redis (with simple yet comprehensive examples):

https://dzone.com/refcardz/getting-started-with-redis

Online Tool for ASCII:

http://asciiflow.com

Plain Text ASCII Data Types Visualizations

Redis Strings (Key Value):

+---------------+
|               |
| +---+ +-----+ |
| |key| |value| |
| +---+ +-----+ |
|               |
| +---+ +-----+ |
| |key| |value| |
| +---+ +-----+ |
|               |
| +---+ +-----+ |
| |key| |value| |
| +---+ +-----+ |
|               |
| +---+   +---+ |
| |...|   |...| |
| +---+   +---+ |
|               |
+---------------+


Redis Lists:

+-------------------------------------+
|                                     |
| +---+ +-----+ +-----+ +-----+ +---+ |
| |key| |value| |value| |value| |...| |
| +---+ +-----+ +-----+ +-----+ +---+ |
|                                     |
+-------------------------------------+


Redis Hashes:

+-----------------------+
|                       |
| +---+                 |
| |key|                 |
| +---+                 |
|                       |
|       +-----+ +-----+ |
|       |field| |value| |
|       +-----+ +-----+ |
|                       |
|       +-----+ +-----+ |
|       |field| |value| |
|       +-----+ +-----+ |
|                       |
|       +-----+ +-----+ |
|       |field| |value| |
|       +-----+ +-----+ |
|                       |
|       +---+     +---+ |
|       |...|     |...| |
|       +---+     +---+ |
|                       |
+-----------------------+

Redis Sets:

+-------------------------------------------------------------+
|                                                             |
| +---+ +-------------+ +-------------+ +-------------+ +---+ |
| |key| |uniqueMember1| |uniqueMember2| |uniqueMember3| |...| |
| +---+ +-------------+ +-------------+ +-------------+ +---+ |
|                                                             |
+-------------------------------------------------------------+

Redis Sorted Sets:

+-------------------------------+
|                               |
| +---+                         |
| |key|                         |
| +---+                         |
|                               |
|       +-----+ +-------------+ |
|       |score| |uniqueMember1| |
|       +-----+ +-------------+ |
|                               |
|       +-----+ +-------------+ |
|       |score| |uniqueMember2| |
|       +-----+ +-------------+ |
|                               |
|       +-----+ +-------------+ |
|       |score| |uniqueMember3| |
|       +-----+ +-------------+ |
|                               |
|       +---+             +---+ |
|       |...|             |...| |
|       +---+             +---+ |
+-------------------------------+

Redis Geopositions:
Same as Sorted Set: Score is calculated from latitude and longitude (Geohash).


Redis Bitmaps:

+----------------+
|                |
| +---+ +------+ |
| |key| |0|1...| |
| +---+ +------+ |
|                |
+----------------+


Redis HyperLogLogs:

+-------------------------------------------------------+
|                                                       |
| +---+ +---------------------------------------------+ |
| |key| |uniqueMember1 uniqueMember2 uniqueMember3 ...| |
| +---+ +---------------------------------------------+ |
|                                                       |
+-------------------------------------------------------+