Connect and Configure Redis in Django Project with Example

Django, a popular Python web framework, offers support for various databases. But when it comes to caching and real-time data handling, Redis, an in-memory data structure store, shines. Redis is widely used for its speed, simplicity, and versatility. In this blog, we will walk you through the process of connecting Redis to a Django project, enabling you to harness its power for caching, session management, and more.

Prerequisites:

Before we begin, ensure you have the following prerequisites in place:

  1. Django installed on your system.
  2. Redis server installed and running.
  3. Basic familiarity with Django project structure and database concepts.
  4. Virtual Environment, this is optional but recommended. You check our blog here.

Note: For this tutorial, we are using our basic skeleton project for Django. You can also download the project from here.

Step 1: Install Required Packages – Django-redis

To connect Django to Redis, you’ll need the “django-redis” package. Install it using pip:

pip install django-redis

Step 2: Configure Django Settings for Redis Database

Open your Django project’s settings.py file (located inside the main project folder) and add the following configuration for Redis:

CACHES = {
    'default': {
        'BACKEND': 'django_redis.cache.RedisCache',
        'LOCATION': 'redis://127.0.0.1:6379/1',  # Replace with your Redis server address and database number
        'OPTIONS': {
            'CLIENT_CLASS': 'django_redis.client.DefaultClient',
        }
    }
}

SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "default"

Ensure you replace 'redis://127.0.0.1:6379/1' with the appropriate Redis server address and database number. In this example, we’re using database number 1, but you can use any valid database number.

Step 3: Test the Connection

With Redis configured in your Django project, it’s time to test the connection. Start the Django development server:

python manage.py runserver

Visit http://127.0.0.1:8000/ in your web browser. Django will now use Redis for caching and session management.

Understand & Explore Redis Features in App

Now that Redis is successfully connected to your Django project, you can use its features for caching, session management, real-time data handling, and more. Utilize Django’s caching framework to cache querysets, views, and expensive function calls, thereby boosting your application’s performance.

Step 1: Create a Sample View in Django App

In the views.py file of your Django app, create a simple view that performs a time-consuming task, such as fetching data from a database and processing it.

# views.py

import random
from django.shortcuts import render
from django.core.cache import cache
from time import sleep

def time_consuming_task():
    # Simulating a time-consuming task by generating a random number between 1 and 100
    sleep(5)
    return random.randint(1, 100)

def cached_view(request):
    # Check if the result is already in the cache
    result = cache.get('cached_result')
    if result is None:
        # If not in cache, perform the time-consuming task and store the result in cache
        result = time_consuming_task()
        cache.set('cached_result', result, timeout=30)  # Cache result for 30 seconds

    return render(request, 'cached_view.html', {'result': result})

Step 2: Create a Template for Displaying Cache Result

By default, Django looks for templates in the “templates” folder inside each app. In the templates folder of your app, create a file named cached_view.html:

<!-- cached_view.html -->

<!DOCTYPE html>
<html>
<head>
    <title>Redis Caching Example</title>
</head>
<body>
    <h1>Random Number Generator</h1>
    <p>Here's a random number for you:</p>
    <h2>{{ result }}</h2>
</body>
</html>

Step 3: Run the Development Server

Now, let’s start the Django development server:

python manage.py runserver

Step 6: Test the Caching

Visit http://127.0.0.1:8000/cached_view/ in your web browser. The first time you access the view, it will take approximately 5 seconds to load since it performs the time-consuming task (generating a random number) and caches the result for 30 seconds. If you refresh the page within those 30 seconds, the result will be fetched from the cache, and you will see a different random number each time.

Error – redis.exceptions.AuthenticationError: Authentication required.

If you are getting redis auth error redis.exceptions.AuthenticationError: Authentication required. Then use bellow settings for redis authentication in settings.py file:

# settings.py

CACHES = {
    'default': {
        'BACKEND': 'django_redis.cache.RedisCache',
        'LOCATION': 'redis://your_username:your_password@127.0.0.1:6379/1',  # Replace with your Redis server address and database number
        'OPTIONS': {
            'CLIENT_CLASS': 'django_redis.client.DefaultClient',
        }
    }
}

SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "default"

Read our Blog on How to Protect Sensitive Data in Python Projects like Django and Flask.

Conclusion:

Congratulations! You have successfully integrated Redis into your Django project, leveraging its powerful features for caching and real-time data handling. Redis provides efficient solutions for caching and session management, making your web application faster and more scalable.

Remember to implement Redis with caution and consider its data eviction policies to avoid excessive memory usage. As you explore Redis further, you’ll discover its versatility in solving various caching and data management challenges. Enjoy optimizing your Django project with Redis!

Find this Project on Github

Blogs you might like to Read!