,

How to store JSON in Redis using Docker

ajeetraina Avatar

·

,

·

RedisJSON is a source-available Redis module that lets you store, manipulate, and query JSON documents in Redis. The standard Redis Python client (v4.0 or greater) supports all of the features of RedisJSON, and in this tutorial, we’ll see how to get started with them.

Getting started with RedisJSON

To run the examples below, you’ll need to ensure that you have an instance of Redis that includes RedisJSON. If you’re developing locally, you can use Docker for this:

Copied!
docker run -p 6379:6379 --name redis-redisjson redislabs/rejson:latest

Verify that the RedisJSON module is loaded

Connect to Redis using redis-cli, and run the info modules command:

Copied!
redis-cli 127.0.0.1:6379> info modules # Modules module:name=ReJSON,ver=20004,api=1,filters=0,usedby=[],using=[],options=[] 127.0.0.1:6379>

Ensure that you’re running RedisJSON v2.0 or greater (here indicated as 20004).

Load the latest version of redis-py

You’ll need redis-py version 4.0 or later. If you’re using pipenv, you can install the client library like so:

Copied!
pipenv install redis

Then you can run pipenv graph to make sure you’re running the latest version of the client:

Copied!
$ pipenv graph redis==4.0.2

Storing JSON in Redis

Let’s consider a simple JSON document structure representing a user:

Copied!
{ "name": "Jane", "age": 33, "location: "Chawton" }

Here’s the Python code to store this document in Redis using RedisJSON:

Copied!
import redis from redis.commands.json.path import Path client = redis.Redis(host='localhost', port=6379, db=0) jane = { 'name': "Jane", 'Age': 33, 'Location': "Chawton" } client.json().set('person:1', Path.rootPath(), jane) result = client.json().get('person:1') print(result)

In the code above, we first connect to Redis and store a reference to the connection in the client variable.

Next, we create a Python dictionary to represent a person object.

And finally, we store the object in Redis using the json().set() method. The first argument, person:1 is the name of the key that will reference the JSON. The second argument is a JSON path. We use Path.rootPath(), as this is a new object. Finally, we pass in the Python dictionary, which will be serialized to JSON.

To retrieve the JSON object, we run json().get(), passing in the key. The result is a Python dictionary representing the JSON object stored in Redis.

Run the code

If you copy the code above into a file called main.py, you can run the code like so:

Copied!
$ pipenv python run main.py

Verify that the JSON document has been added to Redis

Start redis-cli to connect to your Redis instance. Then run the following command:

Copied!
localhost:6379> json.get person:1 "{\"name\":\"Jane\",\"Age\":33,\"Location\":\"Chawton\"}"

Fetching specific fields from a JSON document

You can use RedisJSON to fetch specific fields from a document by specifying a path. For example, here’s how to return only the name field:

Copied!
name = client.json().get('person:1', Path('.name')) print(name)

This code will print the string “Jane”.

You can execute the same query from the command line:

Copied!
localhost:6379> json.get person:1 '.name' "\"Jane\""

References

Leave a Reply

Your email address will not be published. Required fields are marked *