Nouveau : Datasets open source gratuits disponibles !Decouvrir →
🐍
Intermediaire 30 min Python

Python avec Redis : guide pratique

Pourquoi Python avec Redis : guide pratique ?

Au quotidien, les développeurs ont besoin de stocker des données temporairement en mémoire vive pour une accès rapide et une meilleure performance. C'est là que Redis entre en jeu. C'est un système en mémoire clé-valeur qui offre une grande vitesse d'accès et est idéal pour le traitement à haute vitesse, l'analyse de big data et la mise en cache.

Un cas d'utilisation concret serait de mettre en place un système de mise en cache pour une application web. En utilisant Redis, on peut stocker les résultats des requêtes fréquentes en mémoire vive, ce qui accélère la réponse du serveur et réduit le temps de traitement.

Prerequis

  • Connaissance avancée de Python
  • Familiarité avec les structures de données clés-valeur
  • Installation de Redis (version 4.0 ou plus tard)
  • Installation de pip (Python package installer)

Concepts fondamentaux

Connexion à Redis

Pour se connecter à un serveur Redis, on utilise la bibliothèque redis-py. Voici comment est structure une connexion.

import redis

## Connexion au serveur Redis local
r = redis.Redis(host='localhost', port=6379, db=0)

Stockage et récupération des données

Redis permet de stocker différents types de données : chaînes (strings), listes, ensembles, hashes et séries temporelles. Voici comment stocker et récupérer une chaîne.

## Stockage d'une chaîne
r.set('nom', 'John Doe')

## Récupération d'une chaîne
nom = r.get('nom')
print(nom.decode())  # Decode le bytes en string

Expiration des clés

Redis permet de définir une durée d'expiration pour chaque clé. Cela est utile pour les données temporaires.

## Stockage avec expiration (5 secondes)
r.setex('nom_temporaire', 5, 'John Doe')

Transactions

Redis supporte les transactions pour assurer l'intégrité des opérations.

pipeline = r.pipeline()

## Ajoute plusieurs commandes au pipeline
pipeline.set('a', 10)
pipeline.set('b', 20)

## Exécute toutes les commandes du pipeline
pipeline.execute()

Mise en pratique : projet fil rouge

Étape 1 : Création de l'environnement

mkdir redis-python-project
cd redis-python-project
pip install redis

Créez un fichier main.py avec le contenu suivant :

import redis

## Connexion au serveur Redis local
r = redis.Redis(host='localhost', port=6379, db=0)

Étape 2 : Stockage et récupération des tâches

Créez un fichier tasks.py avec le contenu suivant :

import redis
from datetime import datetime

## Connexion au serveur Redis local
r = redis.Redis(host='localhost', port=6379, db=0)

def add_task(task):
    task_id = str(datetime.now().timestamp())
    r.set(task_id, task)
    return task_id

def get_tasks():
    keys = r.keys('*')
    tasks = {key.decode(): r.get(key).decode() for key in keys}
    return tasks

Étape 3 : Interface utilisateur (CLI)

Créez un fichier cli.py avec le contenu suivant :

import sys
from tasks import add_task, get_tasks

if __name__ == "__main__":
    if len(sys.argv) < 2:
        print("Usage: python cli.py [add|get]")
        sys.exit(1)

    command = sys.argv[1]

    if command == "add":
        task = ' '.join(sys.argv[2:])
        if task:
            task_id = add_task(task)
            print(f"Task added with ID: {task_id}")
        else:
            print("Please provide a task description.")
    elif command == "get":
        tasks = get_tasks()
        for task_id, task in tasks.items():
            print(f"{task_id}: {task}")
    else:
        print("Invalid command. Use 'add' to add a task or 'get' to list all tasks.")

Étape 4 : Exécution du projet

python cli.py add "Buy groceries"
python cli.py get

Erreurs frequentes et debugging

  1. Erreur : RedisError: Connection refused

    # ❌ Mauvais
    r = redis.Redis(host='localhost', port=6379, db=0)
    
    # ✅ Correct
    r = redis.Redis(host='127.0.0.1', port=6379, db=0)
    
  2. Erreur : TypeError: 'NoneType' object is not subscriptable

    # ❌ Mauvais
    task_id = r.get('nom')
    print(task_id['a'])
    
    # ✅ Correct
    task_id = r.get('nom')
    if task_id:
        print(task_id.decode()['a'])
    
  3. Erreur : PipelineError: Transaction discarded

    # ❌ Mauvais
    pipeline = r.pipeline()
    pipeline.set('a', 10)
    pipeline.set('b', 20)
    pipeline.execute()
    
    # ✅ Correct
    pipeline = r.pipeline(True)  # Activer les transactions
    pipeline.set('a', 10)
    pipeline.set('b', 20)
    try:
        pipeline.execute()
    except redis.WatchError:
        print("Transaction discarded")
    

Pour aller plus loin

Piste 1 : Utiliser Redis pour le cache d'une API

Utilisez Redis pour mettre en cache les résultats des requêtes à une API externe. Cela réduit le nombre de requêtes HTTP et améliore la performance.

Piste 2 : Implémenter un système de notifications avec Redis Streams

Redis Streams est idéal pour implémenter un système de notifications en temps réel. Créez un script qui envoie des notifications dans une stream et un autre qui les consomme.

Piste 3 : Utiliser Redis pour le comptage d'occurrences

Utilisez Redis pour compter l'occurrence de certains événements. Cela peut être utilisé pour surveiller la popularité des articles, par exemple.

Défi pratique

Implémentez un système de leaderboard en utilisant Redis. Chaque utilisateur a une score et vous devez afficher les 10 meilleurs scores en temps réel.

Besoin d'aide sur Python ?

Besoin d'aide sur un projet technique ? Decrivez-le pour des conseils personnalises.

Recevoir des conseils

Questions frequentes

Comment installer Redis sur mon ordinateur ?
Pour installer Redis, vous pouvez utiliser un gestionnaire de paquets comme Homebrew sur macOS ou apt-get sur Ubuntu. Une fois installé, assurez-vous que le service Redis est démarré.
Comment me connecter à mon serveur Redis depuis Python ?
Pour vous connecter à votre serveur Redis depuis Python, utilisez la bibliothèque `redis-py`. Exemple : `import redis; r = redis.Redis(host='localhost', port=6379, db=0)`
Quelle est la différence entre SET et GET en Redis ?
SET est une commande pour stocker une valeur dans Redis. GET est utilisée pour récupérer cette valeur. Ainsi, SET permet de définir une clé avec une valeur, tandis que GET permet d'obtenir la valeur associée à une clé spécifique.

Pages liees

Chaque semaine, le meilleur de la tech francaise

Tendances, salaires, outils et opportunites — directement dans votre boite mail.

Gratuit. Desabonnement en un clic. Pas de spam.